- 博客(60)
- 收藏
- 关注
原创 谈谈JDBC以及mybatis框架
文章目录理解JDBCJDBC连接的本质JDBC流程mybatis框架两个占位符mybatis缓存借助反射实现:结果集封装对象设计模式理解JDBCJDBC连接的本质JDBC流程mybatis框架两个占位符mybatis缓存借助反射实现:结果集封装对象设计模式...
2021-06-03 17:47:49
598
原创 聊聊HTTPS
文章目录理解HTTPS密码体制鉴别数字签名报文鉴别实体鉴别HTTPS握手流程SSL记录重放理解HTTPSHTTP的头部信息是基于键值对的,比较容易理解。而且首部字段允许开发人员自定义添加,灵活性和扩展性也比较好。但是HTTP是基于明文传输的,存在安全性问题。HTTPS就是提供安全服务的HTTP,在应用层与传输层之间增加了一个安全层子层SSL/TLS,其中HTTPS的熟知端口号是443.发送数据时,应用程序向将数据呈递给SSL套接字(安全套接字),对数据加密后才会交给TCP套接字发送出去。总结:HTT
2021-06-02 22:32:09
452
1
原创 理解CAS与锁
文章目录理解锁CAS乐观锁和悲观锁内存语义特点ABA写一个自旋锁理解锁锁是什么?一个变量。线程A看见这个变量已经有主人了,它要么等待、要么去sleep、要么放弃,线程B释放锁就是将这个锁变量的主人重新置空。那么无论是获取锁的操作还是释放锁的操作,本身都是应该是原子的,应该是一个事务!我们平时更关心的是加锁和解锁之间的代码,那么上锁和解锁本身如何保证原子性?我只能说方式有很多,不过主流的实现方案是基于CAS指令。总结,锁就是一个变量,访问一个变量前先抢占锁,这种访问策略也称为悲观锁策略。阻塞和非阻塞主要
2021-06-02 17:59:23
765
原创 java基础复习(六):容器类库
文章目录理解容器的本质容器与数组容器的最佳实践思考:set、list、map接口ArrayList和linkedList共同点思考细节对比选择双向链表还是单链表选择链表还是数组随机访问复杂度对比hashMaphashCode()与hash()哈希函数的作用hashCode的作用分析hashCode的实现(31)扩容原理jdk7死循环的产生对比1.7与1.8的hashMap实现阈值问题什么是loadfactor为啥树化阈值为8,而恢复为6红黑树性质解决哈希冲突的办法哈希函数的其他实现put与get方法的实现简
2021-06-02 16:37:26
916
原创 java基础复习(五):线程和线程池
文章目录理解线程操作系统的线程与虚拟机的线程线程模型线程的状态创建线程的几种方式start与run本质区别线程池的引入线程池核心参数工作队列类型拒绝策略类型线程池的几种类型简述线程池原理线程池异常处理细节shutDown与shutDownNowfutureTaskexecute与submit线程池状态理解线程操作系统的线程与虚拟机的线程线程模型线程的状态创建线程的几种方式start与run本质区别线程池的引入线程池核心参数工作队列类型拒绝策略类型线程池的几种类型简述线程池原理线程
2021-05-23 20:19:02
485
原创 聊聊HTTP
文章目录理解应用层与HTTPHTTP细节请求和响应虚拟主机长连接和短连接状态追踪cookiesessiontoken响应码对get和put的思考HTTP版本HTTPS理解应用层与HTTPHTTP细节请求和响应虚拟主机长连接和短连接状态追踪cookiesessiontoken响应码对get和put的思考HTTP版本HTTPS...
2021-05-22 18:10:02
402
1
原创 聊聊常见设计模式
文章目录单例模式饿汉式懒汉式线程安全懒汉式基于内部类基于枚举代理模式动态代理与静态代理jdk动态代理cglib动态代理迭代器模式模板方法模式适配器模式装饰者模式单例模式饿汉式懒汉式线程安全懒汉式基于内部类基于枚举代理模式动态代理与静态代理jdk动态代理cglib动态代理迭代器模式模板方法模式适配器模式装饰者模式...
2021-05-20 18:57:37
404
原创 java基础复习(四):面向对象深度解析
文章目录理解面向对象三大特性类与对象类加载过程static对象的创建new关键字做了什么new的执行细节this和superthis的本质this与static无法共存的本质super的本质重写与重载接口与抽象类理解面向对象三大特性类与对象类加载过程static对象的创建new关键字做了什么new的执行细节this和superthis的本质this与static无法共存的本质super的本质重写与重载接口与抽象类...
2021-05-17 22:46:30
547
原创 聊聊进程和线程
如何切入聊聊进程和线程的区别,因为被问的太多,已经被列为八股文了。但是我觉得,如果一上来就“进程是资源分配的基本单元、线程是任务调度和执行的基本单元”总感觉“背书感”太强,是不是可以尝试“推导”的方式对该问题进行展开?引入首先,最开始是没有进程和线程的概念的,这个时期CPU一段时间内总是执行一个程序、不存在切换和中断的说法。一个程序执行完毕之前,这个CPU就一直被这个程序占用。这个时候是不需要进程的概念的,因为引入进程无法是为了“保存某个运行中程序的上下文到某种数据结构中”来支持程序执行的切换。进程
2021-05-16 14:04:57
416
原创 java基础复习(三):深入理解关键字final及内部类
finalfinal直译就是最终的、不改变的。它可以修饰的地方很多:局部变量、静态变量、实例变量(所有的变量,包括形参,它也是特殊的局部变量)类、方法也都可以修饰。这么看来,它似乎可以作用在任何位置。那么我们分别列举一些他们在不同位置到达的不同效果吧。【1】修饰变量:修饰任何变量,都使得为该变量开辟的内存空间仅能存放一次值,且不可以修改。这个值可以是一个字面量,也可以是一个地址值。(如果更具体一点:基本类型变量的值不能变,引用类型指向的对象不能变)【2】修饰方法:方法不能被重写。显然方法被修饰为f
2021-05-14 18:57:49
382
原创 java基础复习(二):深入理解 java.lang.String以及对线程安全问题的思考
标题如何理解String不可变StringString的常量池反编译:访问字面量字面量的解析字符串常量池深度分析经典问题:new String () 和 intern()String的优点如何理解String我们提到string,总是离不开“字面量”和“对象”。那么string到底底层是一个什么?string底层就是一个字符数组。如果学过C语言,肯定知道:C语言的字符数组和字符串联系非常密切。C语言通过使用’/0’标志字符串的结尾,如果而string的长度就是字符数组的长度减去尾部的’/0’。现在让你实
2021-05-14 15:03:00
2607
原创 java基础复习(一):对基本类型与引用类型的深度思考
目录从内存层面理解占用大小栈中存储堆中存储引用类型值与引用传递问题从内存层面理解java中具有八大基本类型,分别是boolean、byte、char、short、int、float、double、long。还有一个引用类型。其中我们可以通过引用类型间接操作对象,而我们可以通过基本类型变量直接修改内存中的值。引用类型的大小和jvm的位数有关,jvm位数的大小决定了指令所覆盖的内存范围。内存就是一个特别大的字节数组,一位的CPU能够寻址的范围为2——就是0和1。而CPU的位宽越大,CPU的寻址范围就越
2021-05-12 20:19:44
257
原创 谈一谈运输层(三):TCP连接管理(深度解析)
文章目录连接?UDP特点TCP特点序号其实是四次握手?通过HTTP抓包分析序号选择合适的ISN三次握手常见问题丢包问题分析四次挥手常见问题保活连接?首先要明白,传输层是端到端之间的通信,这个“端”姑且认为是本地ip地址和本地端口组合而成的套接字端点。不管是基于UDP传输还是基于TCP传输,应用进程总是借助套接字端点实现数据的收发(通过系统调用)。也就是说,如果想和另一端的应用进程通信,首先要有一个套接字端点,通过socket()函数调用即可得到,当两边的进程都有一个各自的端点,他们便可以尝试通信了。U
2021-04-26 20:49:15
430
原创 谈一谈运输层(二):滑动窗口、流量控制、拥塞控制、可靠传输
谈谈滑动窗口协议吧滑动窗口?不能将缓冲区的数据一次全部传输完毕吗?显然,从字面上理解,滑动窗口控制数据的传输速率,它属于传输控制协议的一种。遵循滑动窗口协议的发送方,每次只能发送有限的分组,当发送窗口中已发送的报文被确认后,窗口便可以向右滑动(窗口是一种思想,可变还是不可变看具体实现),而接收方窗口指明了希望接收的分组。首先明确,滑动窗口不是一个具体的协议,它是一类协议或者说一组控制传输的思想,它并不是属于某一层的协议,只是滑动窗口思想可以用于实现传输控制。基于滑动窗口思想的传输控制协议要求发送方或接收
2021-04-23 15:57:26
792
原创 个人万字总结:java后端——校招需要复习什么?
文章目录前言jdk:基础jdk: 容器jdk: 并发jvmjucspringmysql操作系统计算机网络必会代码必会算法总结前言博主目前是一名应届生,目前处于找工作的时期,另一方面也在不断的复习。复习的过程中一直整理复习的大纲,以便每次需要的时候都可以用到。目前我将这份复习大纲分享在博客中。我认为面试问题的范围和简历的内容有很大的关系,但是语言特性、操作系统、计算机网络、基本框架是必问的。(我的简历即使没有明写spring,还是被问到了),因此,我将这些问题全部写出来,后面有可能会对这些问题进行
2021-04-19 20:00:14
899
1
原创 聊聊虚拟内存
目录前提的内存知识分段和分页页表理解虚拟内存简述一下如何实现缺页中断处理过程前提的内存知识内存是什么?说白了就是一长串字节数组。编程的时候难免申请一段内存空间,有了内存空间才能存放数据、存放指令代码。 int[] array = new int[4];程序员使用编辑器写了一段代码,在堆中申请一块连续的内存空间,并且在栈内存中使用一块4字节的内存保证这个堆中对象的引用(地址值)。写完之后,保存到磁盘,那么这个程序是静态的,保存在磁盘中,它并没有被运行。当一个程序被执行后,如果程序中
2021-04-16 18:09:02
392
原创 必备代码(一):四种LRU缓存实现+LFU缓存实现
目录前言HashMap + LinkedListLinkedHashMap扩展hashMap + 自定义双向链表数组代替hashMap总结前言如果面试时考察的代码中,那么LRU缓存出现的频率是非常高的。博主在LeetCode中刷这道题已经不下十次了。已经总结出了该算法的思路。附上LRU缓存机制在LeetCode上的地址LRU的思想:将最近一次使用的时间作为衡量某个资源(如内存)的价值,最近一次使用的时间越久,它的价值就越小。实现LRU需要一个数据结构充当“缓存”,还需要一个数据结构用于保存实际的数
2021-04-14 18:52:46
550
原创 谈一谈运输层(一):UDP
常见的几个问题方向: UDP和TCP是什么,区别是什么,场景等UDP如何进行一对多、多对多TCP如何保证可靠传输滑动窗口协议了解吗TCP连接管理讲一下TCP拥塞控制讲一下TCP流量控制讲一下新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增加了
2021-04-13 20:49:12
588
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅