面试
文章平均质量分 83
Shenkh的Java壁橱
len 一定要有梦想
展开
-
TCP拥塞控制
背景介绍 两台主机在传输数据包的时候,如果发送方迟迟没有收到接收方反馈的ACK,那么发送方就会认为它发送的数据包丢失了,进而会重新传输这个丢失的数据包。然而实际情况有可能此时有太多主机正在使用信道资源,导致网络拥塞了,而A发送的数据包被堵在了半路,迟迟没有到达B。这个时候A误认为是发生了丢包情况,会重新传输这个数据包。这样不仅浪费了信道资源,还会使网络更加拥塞。 拥塞控制的出现,减少了网络拥堵,促使网络尽快回复正常。名次解释MSS:最大报文长度,这里指报文数据的大小ssthresh :慢启动原创 2021-05-23 18:21:39 · 214 阅读 · 0 评论 -
时间复杂度如何计算
前言 时间复杂度用于描述一个算法的运行时间消耗。刷题(leetcode等)也会有部分题要求写出一些进阶解法。一、简介1、时间频度T(n) 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多少就可以了。一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。2、时间复杂度 时间频度T(n)中,n原创 2021-05-04 17:52:09 · 25288 阅读 · 2 评论 -
Java默认线程池及线程池参数
一、Executors默认创建的线程池 jdk中Executors提供了几种默认的线程池:FixedThreadPool创建一个固定线程数的线程池,核心线程数和最大线程数固定相等。keepAliveTime为0,意味着一旦有多余的空闲线程,就会被立即停止掉,不过因为最多只有nThreads个线程,且corePoolSize和maximunPoolSize值一致,所以这个值无法发挥作用。阻塞队列采用了LinkedBlockingQueue,它是一个无界队列,由于阻塞队列是一个无界队列,因此永原创 2020-07-19 23:02:55 · 4851 阅读 · 0 评论 -
Mysql索引失效场景总结
隐式转换这种是经常出现的场景,例如表t的字段 name(varchar类型),通过条件查询传入数字类型,虽然可以查出所要的结果,但是此时索引没有命中。反例: select * from t where name=123;正例: select * from t where name=‘123’;索引列的运算在...原创 2020-07-05 15:30:08 · 181 阅读 · 0 评论 -
IO模型
一、io模型种类 参考《Unix网络编程》一书,网络IO的模型有如下五种:同步模型(synchronous IO)阻塞IO(bloking IO)非阻塞IO(non-blocking IO)多路复用IO(multiplexing IO)信号驱动式IO(signal-driven IO)异步IO(asynchronous IO)二、io模型简述1、阻塞IO(bloking IO) 同步阻塞 IO 模型是最常用的一个模型,也是最简单的模型。在linux中,默认情况下所有的soc转载 2020-06-27 17:26:11 · 139 阅读 · 0 评论 -
Spring Bean的生命周期
Spring bean 的生命周期整体流程 从初始化bean到销毁,流程如下: 中文版本:bean实例生命周期过程如下:Bean容器找到配置文件中 Spring Bean 的定义。Bean容器利用Java Reflection API创建一个Bean的实例。如果涉及到一些属性值 利用set方法设置一些属性值。如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字。如果Bean实现了BeanClassLoaderAware接口,调用s转载 2020-06-27 00:55:02 · 129 阅读 · 0 评论 -
进程间的通信方式
一、进程通信的目的数据传输一个进程需要将其数据发送给另一进程,发送的数据量在一个字节到几M字节之间。共享数据多个进程操作共享数据事件通知一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。资源共享多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。进程控制有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。二、linux使用的进程间通原创 2020-06-03 23:46:56 · 171 阅读 · 0 评论 -
Mysql一个查询语句的执行流程
一、MySQL逻辑结构 MySQL 可以分为 Server 层和存储引擎层两部分。二、sql的执行流程1、连接器 在数据库层执行SQL语句时,应用程序会连接到相应的数据库服务器,把SQL语句发送给服务器处理。2、查询缓存 服务器在解析一个查询语句之前,如果查询缓存是打开的(MySQL默认打开,可以使have_query_cache查看),在接收到查询请求后,并不会直接去数据库查...原创 2020-03-14 17:10:51 · 185 阅读 · 0 评论 -
Java服务运行时CPU飙升问题排查
一、前言 服务器上某个服务CPU异常告警,CPU使用率飙升到几十百分百,甚至达到百分之几百。二、排查步骤1、top命令查看进程 执行:top -c ,显示进程运行信息列表。然后键入P (大写p),进程按照CPU使用率排序。找到CPU消耗最高的进程,记录进程的id(PID)。2、找到进程中消耗最高的线程 执行:top -HP 进程id 命令,查看java进程下的所有线程占CPU...原创 2019-12-07 17:32:33 · 1473 阅读 · 0 评论 -
MyISAM和InnoDB的区别
一、使用的锁MyISAM:myisam只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。也可以通过lock table命令来锁表,这样操作主要是可以模仿事务,但是消耗非常大,一般只在实验演示中使用。InnoDB :Innodb支持事务和行级锁...原创 2019-10-27 23:33:47 · 152 阅读 · 0 评论 -
RocketMQ、Kafka、RabbitMQ对比
一、优缺点1、RabbitMQ RabbitMQ 2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。 RabbitMQ优点:由于erlang语言的特性,mq 性能较好,高并发;吞吐量到万级,MQ功能比较完备健壮、稳定、易用、跨平台、支持多种语言、文档齐全;开源提供的管理界面非常棒,用起来很好用社区活跃度高;...原创 2019-09-15 18:20:08 · 236 阅读 · 0 评论 -
Java中与、或、异或、位运算
一、与(&)运算原创 2019-08-03 02:03:15 · 458 阅读 · 0 评论 -
HashMap实现原理(JDK8)
一、Map的整体结构概要上述为HashMap的内容结构,方法包含大部分常用的,没有列举完。二、HashMap结构图1、JDK7及之前2、JKD8及之后由上面结构图可知,HashMap由数组和链表共同构成,JDK8对HashMap做了优化,采用了红黑树的数据结构来做优化,使得HashMap存取速度更快。三、HashMap实例化过程1、几个重要的参数HashMap几个重要属性...转载 2019-07-25 01:33:18 · 254 阅读 · 0 评论 -
JVM内存模型
一、JVM运行时数据区 JVM运行数据区主要包含:程序计数器、虚拟机栈、本地方法栈、堆、方法区。1、程序计数器 程序计数器其实就是一小块内存,记录着当前程序运行到哪了字节码解释器的工作就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。字节码解释器工作时就是通过改变这个计数器的值来选取下一个需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成...原创 2019-07-29 01:16:13 · 102 阅读 · 0 评论 -
SpringMVC工作原理与工作流程
一、SpringMVC工作原理图二、SpringMVC流程1、 用户发送请求至前端控制器DispatcherServlet。2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。4...转载 2019-04-28 00:41:17 · 312 阅读 · 0 评论