容器编排工具比较:Docker vs Podman
这两个技术都是容器编排工具。他们都有各自的优势和特点。其中,docker有其自己的一体化解决方案。
docker与podman的对比
微服务:松耦合,统一整体的架构风格
(1)微服务就是一种架构风格(2)微服务就是把一个项目拆分成独立的多个服务,并且多个服务是可以独立运行的,而每个服务都会占用线程。
表现为结构上的松耦合,功能上的统一整体微服务,关键其实不仅仅是微服务本身,而是系统要提供一套基础的架构,这种架构使得微服务可以独立的部署、运行、升级,不仅如此,这个系统架构还让微服务与微服务之间在结构上“松耦合”,而在功能上则表现为一个统一的整体。这种所谓的“统一的整体”表现出来的是统一风格的界面,统一的权限管理,统一的安全策略,统一的上线过程,统一的日志和审计方法,统一的调度方式,统一的访问入口等等。
百度网盘极速下载:IDM+油猴插件
百度网盘快速下载方法:首先,该方法的前提条件是IDM和网页版百度网盘
你需要下载油猴,并在油猴中添加一个插件百度网盘千千下载助手,这里是快速下载链接
但我要差一嘴,其实这个插件最初是软件小妹进行运维的,后来百度严查,软件小妹就没再运维了。不知道为何被千千下载助手获取。但这并不影响我们白嫖这个好用的插件。
进入百度网盘网页版界面,打开油猴,他会有一系列提示。下载器有IDM和Aria2两种,推荐IDM。后续方法可以直接看网页的提示了。这里不再多言。
ORM框架比较:Mybatis、Hibernate、JPA、Bee、sqltoy
记录一次阅览的过程相关了解到的有Mybatis,Hibernate,JPA+QueryDSL,sagacity-sqltoy,Bee。简单的记录一下网上的评论和自己的理解。
Mybatis他的本质就是一个SqlUtils。并不是一个orm框架。他的作用是将sql语句与java代码分离开来。通过xml的格式来书写sql语句。进而完成对数据库的控制,不用手动设置参数和对结果集的处理因为是靠自己去写sql语句的。所以他的性能取决于你对sql的理解程度。
Mybatis-plus这里引用一句他人的评论
主要是mybatis带来了几个问题:1、大量的人见到xml就反,就觉得low,这个问题的核心是mybatis的sql写法不直观,基本就是传统java中拼sql的逻辑xml化;2、大家其实都认同单表操作jpa和简单查询QueryDSL,所以产生了大量基于mybatis的plus来做JPA功能;网上不下二十个mybatis的增强,其实这些都可以从JPA、JOOQ上得到启发,基本没有什么创新,无法解决项目中的实质痛点。
HibernateHibernate是一个开放源代码的对象关系映射框架,它对J ...
Vue课设知识点概览
5.30号,记录一下本次课设学到的一些知识点:
vue无法检测到对象内部数据的变化,即便使用了deep:true标签,也只能检测到对象中第一层属性对应的值的变化,而对于对象内的对象,他就无法检测到他的变化了,只能通过this.$set(1,2,3)来改变对象的属性对应的值。数组则通过数组的四个方法来进行修改,不通过直接获取其index来改变。这样子才能被检测到改变。
如何使用iconpark(字节跳动的矢量图标库)首先现在vue中导入他的组件1234//vue2npm i @icon-park/vue//vue3npm i @icon-park/vue-next
通过上述导入整个组件后,再在每个使用的地方专门做引用。使用方法:在具体的组件内,导入你所需要的图标。123456789/** * 引入时使用驼峰式命名 * import {Alarm} from '@icon-park/vue'; * components: { Alarm } * * 使用时使用小写 *<alarm theme="outli ...
Vue 代理服务器配置新增建议
关于配置vue的代理服务器新增两点建议
普通的http或者https请求。满足在vue.config.js配置一个普通的代理然后在使用该代理时可以不用写全完整的uri。而只用写具体的访问地址如下12345678devServer:{ proxy:{ '/api/':{ target:'http://localhost:9090/', pathRewrite:{'^/api':""}, ws:false }}
通过axios向后端发送请求时1234567this.axios({ url:'/api/login', method:'get', params:{ username:this.username } ...
使用Kotlin构建WebSocket服务器模板
记录一个使用kotlin写WebSocket的常用模板
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134package top.zfxt.chat.serviceimport cn.hutool.json.JSONArrayimport cn.hutool.json.JSONObjectimport cn.hutool.json.JSONUtilimport jakarta.websocket.*import jakarta.websocket.serve ...
Vue 父子组件参数传递:props
父组件向子组件传递参数时,可以使用props
1234567export default { props: ['foo'], created() { // props 会暴露到 `this` 上 console.log(this.foo) }}
除了直接使用字符串的形式,也可以使用对象的形式
123456export default { props: { title: String, likes: Number }}
Map和MutableMap:键值对集合
记一个关于Map的知识kotlin中有Map和MutableMap两种
Map是一个接口和通用的元素集合。 Map以键和值对的形式保存数据。 映射的键是唯一的,每个键只保留一个值。 键和值可以是不同类型。 也被分为可变的和不可变的,即Map与MutableMap.
Map它是不可变的,它的大小固定,方法支持只读访问。要使用Map接口,需要使用mapOf()或mapOf <k,v>()函数声明。他的常用方法:getValue(key) 它返回给定键的值,如果映射中没有这样的键,则抛出异常。getOrDefault(key,defaultValue) 获取指定key值的value,没有值时返回默认值contains(key)、containsKey(key) 它检查在Map中是否包含给定的键。minus(key) 返回去除该 key-value的mapplus(pair) 向map中添加key - value但这些方法不能对原Map产生改变。需要改变的话需要使用
1map = map.plus(a to b)
型如上的方法。
MutableMapMutableMap是集合框 ...
WebSocket:双向通信,弥补HTTP不足
WebSocket是一个在单TCP连接上进行全双工通信的协议。允许服务器主动向客户端推送消息。
WebSocket本质上一种计算机网络应用层的协议,用来弥补http协议在持久通信能力上的不足。
HTTP 协议有一个缺陷:通信只能由客户端发起,不具备服务器推送能力。所以进行双向通信时必须使用webSocket。
这种单向请求的特点,注定了如果服务器由连续的状态变化,客户端想要获知会非常麻烦。我们只能使用“轮询”:每隔一段时间,就像服务器发送要给请求。而轮询的效率非常的低。浪费资源。
轮询的危害:服务端被迫维持来自每个客户端的大量不同的连接大量的轮询请求会造成高开销,比如会带上多余的header,造成了无用的数据传输。
websocket是先通过HTTP协议完成第一次握手他们的握手过程
12345678GET /chat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==Sec-WebSocket-Protoc ...