HashMap 如何解决 Hash 冲突
通过引入单向链表来解决 Hash 冲突。当出现 Hash 冲突时,比较新老 key 值是否相等,如果相等,新值覆盖旧值。如果不相等,新值会存入新的 Node 结点,指向老节点,形成链式结构,即链表。当 Hash 冲突发生频繁的时候,会导致链表长度过长,以致检索效率低,所以 JDK1.8 之后引入了红黑树,当链表长度大于 8 时,链表会转换成红黑书,以此提高查询性能。...
spring是怎么解决循环依赖的?
Spring创建bean主要分为两个步骤,创建原始bean对象,接着去填充对象属性和初始化,每次创建bean之前,我们都会从缓存中查下有没有该bean,因为是单例,只能有一个,当我们创建beanA的原始对象后,并把它放到三级缓存中,接下来就该填充对象属性了,这是时候发现依赖了beanB,接着就又去创建beanB,同样的流程,创建完beanB填充属性时又发现他依赖了beanA又是同样的流程,不同的是,这时候可以在三级缓存中查到刚放进去的原始对象beanA,所以不需要继续创建,用它注入beanB,完成beanB
浏览器发出一个请求到收到响应经历了哪些步骤?
1.浏览器解析用户输入的URL,生成一个HTTP格式的请求2.先根据URL域名从本地的hosts文件查找是否有映射IP,如果没有就将域名发送给电脑配置的DNS进行域名解析,得到IP地址3.浏览器通过操作系统将请求通过四层网络协议发送出去4.途中可能会经过各种路由器、交换机、最终到达服务器5.服务器收到请求后,根据请求所指定的端口,将请求传递给绑定了该端口的应用程序,比如8080被tomcat占用了6.Tomcat接收到请求数据后,按照http协议的格式进行解析,解析得到所要访问的servlet7
什么是 TCP 粘包/拆包
1、要发送的数据大于 TCP 发送缓冲区剩余空间大小,将会发生拆包。2、待发送数据大于 MSS(最大报文长度),TCP 在传输前将进行拆包。3、要发送的数据小于 TCP 发送缓冲区的大小,TCP 将多次写入缓冲区的数据一次发送出去,将会发生粘包。4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。...
TCP 粘包/拆包的解决办法
1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。2、发送端将每个数据包封装为固定长度(不够的可以通过补 0 填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。...
为什么网吧电脑配置不高却很流畅,自家电脑如何优化配置
很直接的一个原因是网吧的电脑没有硬盘,系统和软件都是安装在服务器内,每次开关机都会清理所有数据,不会有系统垃圾的堆积以及卡顿,家里电脑想要像网吧电脑一样流畅,需要做这些优化配置调整电脑开机速度优化:1.按住win+i,打开Windows设置,截图如下:2.点击系统,截图如下:3.点击上面截图中的更改新内容的保存位置,截图如下:4.将新的应用保存到非C盘路径进行存储:5.点击上图中的应用,截图如下:6.接着按住win+r调出运行框,输入%temp%,点击确定,截图如下:7.路径大
如何防止电脑卡顿和C盘爆满
C盘一定要删除的4个文件夹,每日一清,防止C盘爆满以及电脑卡顿!4个文件夹为:temp Download LogFiles Prefetch注意:是删除文件夹里的缓存垃圾而不是整个文件夹temp:路径为:C:\Windows\Temp,他里面存放的是电脑的临时存储文件LogFiles:路径为C:\Windows\System32\LogFiles,他里面存放的是一些日常应用文件,可以直接删除Prefetch:路径为:C:\Windows\Prefetch,他里面是电脑已经访问过的文件阅读信息,
认识Netty 线程模型
Netty 使用 EventLoop 来处理连接上的读写事件,而一个连接上的所有请求都保证在一个 EventLoop 中被处理,一个 EventLoop 中只有一个 Thread,所以也就实现了一个连接上的所有事件只会在一个线程中被执行。一个 EventLoopGroup 包含多个 EventLoop,可以把一个 EventLoop 当做是 Reactor 线程模型中的一个线程,而一个 EventLoopGroup 类似于一个 ExecutorService...
什么是Netty 的零拷贝
“零拷贝”是指计算机操作的过程中,CPU 不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(UserSpace)而直接在内核空间(Kernel Space)中传输到网络的方式。...
Netty 的内部执行流程
Netty 的接收和发送 ByteBuffer 采用 DIRECT BUFFERS,使用堆外直接内存进行Socket 读写,不需要进行字节缓冲区的二次拷贝。如果使用传统的堆内存(HEAP BUFFERS)进行 Socket 读写,JVM 会将堆内存 Buffer 拷贝一份到直接内存中,然后才写入Socket 中。相比于堆外直接内存,消息在发送过程中多了一次缓冲区的内存拷贝。Netty 提供了组合 Buffer 对象,可以聚合多个 ByteBuffer 对象,用户可以像操作一个 Buffer 那样方.
对象不可达,一定会被垃圾收集器回收么?
即使不可达,对象也不一定会被垃圾收集器回收,1)先判断对象是否有必要执行 finalize()方法,对象必须重写 finalize()方法且没有被运行过。2)若有必要执行,会把对象放到一个队列中,JVM 会开一个线程去回收它们,这是对象最后一次可以逃逸清理的机会。...
如何查看电脑CPU性能以及提升电脑最大性能
首先,按住win+r,打开运行框,输入msconfig,截图如下:在打开的弹出框里面点击引导,点击高级选项,选择处理器个数,依次操作截图如下:处理器个数下面这个选择框就是你电脑CPU的核心线程数,从上面截图中可以看到我的电脑的最大核心线程数是12,在多线程环境下,尽量使用最大核心线程数,这样就可以使电脑的处理能力增强,CPU性能提高,选择之后点击确定就可以了,然后重启电脑,配置即可生效,截图如下:...
List 和 Set 的区别
List , Set 都是继承自 Collection 接口List 特点:元素有放入顺序,元素可重复Set 特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(元素虽然无放入顺序,但是元素在set中的位置是有该元素的 HashCode 决定的,其位置其实是固定的,加入Set 的 Object 必须定义 equals ()方法,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。)Set和List对比Set:检索元素效率
AccessDeniedException[/usr/share/elasticsearch/config/elasticsearch.yml
docker启动es命令为:docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” -e ES_JAVA_OPTS="-Xms64m -Xmx128m" -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mydata/e
Js & Vue 几行代码实现一个简单的滚动加载触发(思路)
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
今日推荐
周排行