https://www.jianshu.com/p/b6cb4c694951
https://blog.csdn.net/iceman1952/article/details/85504278
https://blog.csdn.net/cnq2328/article/details/50436175
https://www.jianshu.com/p/10584345b10a
https://www.jianshu.com/p/2fdee831ed03
https://blog.csdn.net/qq_27093465/article/details/52262340
https://blog.csdn.net/u014520047/article/details/81940447
https://vimsky.com/article/4162.html
https://juejin.im/post/5c7262a15188252f30484351
https://zhuanlan.zhihu.com/p/59861022
https://blog.csdn.net/qq_32595453/article/details/80660676
https://blog.csdn.net/xlgen157387/article/details/63683882
可以从Java IO底层、JavaIO模型(阻塞、异步等)
https://www.cnblogs.com/crazymakercircle/p/10225159.html
redis如何实现分布式缓存 https://stor.51cto.com/art/201912/607229.htm
说明计算机网络的知识还没有记住
https://www.cnblogs.com/yangyangxxb/p/10218871.html
其实就是jvm的类加载情况,非常相似
- https://blog.csdn.net/lduzhenlin/article/details/83013143
- https://blog.csdn.net/xlgen157387/article/details/53521928
https://www.jianshu.com/p/eb112b25b848
扩容:https://www.jianshu.com/p/5730bff593ed
https://www.cnblogs.com/peizhe123/p/5790252.html
在Iterator的内部有个expectedModCount 变量, 该变量每次初始化Iterator的时候等于ArrayList的modCount,modCount记录了对ArrayList的结构修改次数, 在通过Iterator对ArrayList进行结构的修改的时候都会将expectedModCount 与modCount同步,但是如果在通过Iterator访问的时候同时又通过索引的方式去修改ArrayList的结构的话,由于通过索引的方式只会修改modCount不会同步修改expectedModCount 就会导致modCount和expectedModCount 不相等就会抛ConcurrentModificationException, 这也就是Iterator的fail-fast,快速失效的。所以只要采取一种方式操作ArrayList就不会出问题, 当然ArrayList不是线程安全的,此处不讨论对线程问题。
更加详细的解释 https://blog.csdn.net/yanshuanche3765/article/details/78917507
https://blog.csdn.net/zhangqiluGrubby/article/details/72870493
https://blog.csdn.net/u012050154/article/details/50903326
https://www.cnblogs.com/zhangyu317/p/11226105.html
https://juejin.im/post/5ce3cdc8e51d45777b1a3cdf
- Java Nio使用:https://blog.csdn.net/forezp/article/details/88414741
- Java Nio原理:https://www.cnblogs.com/crazymakercircle/p/10225159.html
- 线程池:http://cmsblogs.com/?p=2448
- 为什么nio快:https://blog.csdn.net/yaogao000/article/details/47972143
- https://www.cnblogs.com/jun-ma/p/11843394.html
- https://blog.csdn.net/Virgil_K2017/article/details/89283946
哈希表的原理:https://blog.csdn.net/yyyljw/article/details/80903391
可以以下方面进行回答
(1)使用的数据结构?
(2)添加元素、删除元素的基本逻辑?
(3)是否是fail-fast的?
(4)是否需要扩容?扩容规则?
(5)是否有序?是按插入顺序还是自然顺序还是访问顺序?
(6)是否线程安全?
(7)使用的锁?
(8)优点?缺点?
(9)适用的场景?
(10)时间复杂度?
(11)空间复杂度?
jdk1.8;https://blog.csdn.net/weixin_42130471/article/details/89813248
1、用数组实现的双端队列 2、线程不是安全的 3、可以用来实现栈
https://blog.csdn.net/qq_44971038/article/details/103204217
ReetrantLock:https://www.jianshu.com/p/f8f6ac49830e
tomcat支持:https://blog.csdn.net/fd2025/article/details/80007435
(1)ArrayBlockingQueue不需要扩容,因为是初始化时指定容量,并循环利用数组; (2)ArrayBlockingQueue利用takeIndex和putIndex循环利用数组; (3)入队和出队各定义了四组方法为满足不同的用途; (4)利用重入锁和两个条件保证并发安全:lock、notEmpty、notFull
https://www.cnblogs.com/winnie-man/p/10471338.html
https://blog.csdn.net/qq_39291929/article/details/81501829
(1)HashMap是一种散列表,采用(数组 + 链表 + 红黑树)的存储结构; (2)HashMap的默认初始容量为16(1<<4),默认装载因子为0.75f,容量总是2的n次方; (3)HashMap扩容时每次容量变为原来的两倍; (4)当桶的数量小于64时不会进行树化,只会扩容; (5)当桶的数量大于64且单个桶中元素的数量大于8时,进行树化; (6)当单个桶中元素数量小于6时,进行反树化; (7)HashMap是非线程安全的容器; (8)HashMap查找添加元素的时间复杂度都为O(1);
(1)TreeMap的存储结构只有一颗红黑树; (2)TreeMap中的元素是有序的,按key的顺序排列; (3)TreeMap比HashMap要慢一些,因为HashMap前面还做了一层桶,寻找元素要快很多; (4)TreeMap没有扩容的概念; (5)TreeMap的遍历不是采用传统的递归式遍历; (6)TreeMap可以按范围查找元素,查找最近的元素;
https://www.jianshu.com/p/dde9b12343c1
HashMap为了存取高效,要尽量较少碰撞,就是要尽量把数据分配均匀,每个链表长度大致相同,这个实现就在把数据存到哪个链表中的算法; 这个算法实际就是取模,hash%length,计算机中直接求余效率不如位移运算,源码中做了优化hash&(length-1), hash%length==hash&(length-1)的前提是length是2的n次方; 为什么这样能均匀分布减少碰撞呢?2的n次方实际就是1后面n个0,2的n次方-1 实际就是n个1; 例如长度为9时候,3&(9-1)=0 2&(9-1)=0 ,都在0上,碰撞了; 例如长度为8时候,3&(8-1)=3 2&(8-1)=2 ,不同位置上,不碰撞; 其实就是按位“与”的时候,每一位都能 &1 ,也就是和1111……1111111进行与运算
- synchronized原理
https://www.jianshu.com/p/d53bf830fa09
- reetrantlock
https://blog.csdn.net/u012102104/article/details/79235938
TCP/IP,协议。socket用于 通信,在实际应用中有im等,因此需要可靠的网络协议,UDP则是不可靠的协议,且服务端与客户端不链接,UDP用于广播,视频流等
装饰模式和适配器模式
相当于快递的打包和拆包,里面的东西要保持一致,不能人为的去改变他,不然就交易不成功。序列化与反序列化也是一样,而版本号的存在就是要是里面内容要是不一致,不然就报错。像一个防伪码一样。
注解、Spring 配置文件、动态代理、jdbc
浅拷贝:仅仅克隆基本类型变量,而不克隆引用类型的变量 深克隆:既克隆基本类型变量,也克隆引用类型变量
1.浅克隆:只复制基本类型的数据,引用类型的数据只复制了引用的地址,引用的对象并没有复制,在新的对象中修改引用类型的数据会影响原对象中的引用。直接使用clone方法,再嵌套的还是浅克隆,因为有些引用类型不能直接克隆。 2.深克隆:是在引用类型的类中也实现了clone,是clone的嵌套,并且在clone方法中又对没有clone方法的引用类型又做差异化复制,克隆后的对象与原对象之间完全不会影响,但是内容完全相同。
保证了可见性不等于正确同步,因为还有原子性没考虑。
(1)CopyOnWriteArrayList使用ReentrantLock重入锁加锁,保证线程安全; (2)CopyOnWriteArrayList的写操作都要先拷贝一份新数组,在新数组中做修改,修改完了再用新数组替换老数组,所以空间复杂度是O(n),性能比较低下; (3)CopyOnWriteArrayList的读操作支持随机访问,时间复杂度为O(1); (4)CopyOnWriteArrayList采用读写分离的思想,读操作不加锁,写操作加锁,且写操作占用较大内存空间,所以适用于读多写少的场合; (5)CopyOnWriteArrayList只保证最终一致性,不保证实时一致性;
https://blog.51cto.com/4247649/2109128
禁止重排序
1、Statement用于执行静态SQL语句,在执行时,必须指定一个事先准备好的SQL语句。 2、PrepareStatement是预编译的SQL语句对象,sql语句被预编译并保存在对象中。被封装的sql语句代表某一类操作,语句中可以包含动态参数“?”,在执行时可以为“?”动态设置参数值。 3、使用PrepareStatement对象执行sql时,sql被数据库进行解析和编译,然后被放到命令缓冲区,每当执行同一个PrepareStatement对象时,它就会被解析一次,但不会被再次编译。在缓冲区可以发现预编译的命令,并且可以重用。 4、PrepareStatement可以减少编译次数提高数据库性能。
https://www.cnblogs.com/keeya/p/9713686.html
https://segmentfault.com/q/1010000007715137
- Netty new 实例化过程
https://blog.csdn.net/charjay_lin/article/details/81810922
- 很常见的 Nullpointerexception ,你是怎么排查的,怎么解决的;
JUC 包里的 ArrayBlockingQueue 还有 LinkedBlockingQueue 啥的又结合源码说了一 通。
https://blog.csdn.net/qq_38366777/article/details/78088386
https://segmentfault.com/a/1190000013504078?utm_source=tag-newest
- https://cloud.tencent.com/developer/article/1471770
- https://zhuanlan.zhihu.com/p/96544118
- https://zhuanlan.zhihu.com/p/48295486
https://juejin.im/post/5ac2eb52518825555e5e06ee
https://blog.csdn.net/github_37130188/article/details/89504500
http://www.vcchar.com/thread-29098-1-1.html
重点讲 newcached 线程池 线程池工作原理 比如 corePoolSize 和maxPoolSize 这两个参数该怎么调
https://juejin.im/post/5d1882b1f265da1ba84aa676#heading-14
https://www.cnblogs.com/kismetv/p/7806063.html
面试题: https://mp.weixin.qq.com/s/2Y5X11TycreHgO0R3agK2A https://mp.weixin.qq.com/s/IdjCxumDleLqdU8MgQnrLQ
https://juejin.im/post/5ce69379e51d455d877e0ca0
https://blog.csdn.net/StubbornAccepted/article/details/70767014
https://juejin.im/post/5b040cf66fb9a07ab7748c8b https://juejin.im/post/5b06bf2df265da0de2574ee1
spring ioc系列文章:http://cmsblogs.com/?p=2806
- 加载流程(概述):https://www.jianshu.com/p/5fd1922ccab1
- 循环依赖问题:https://blog.csdn.net/u010853261/article/details/77940767
https://juejin.im/post/5c525968e51d453f5e6b744b
ioc、aop系列源码: https://segmentfault.com/a/1190000015319623 http://www.tianxiaobo.com/2018/05/30/Spring-IOC-%E5%AE%B9%E5%99%A8%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0%E5%AF%BC%E8%AF%BB/
https://www.jianshu.com/p/e7d59ebf41a3
https://segmentfault.com/a/1190000013258647
https://blog.csdn.net/cswhale/article/details/16941281
https://blog.csdn.net/chenleixing/article/details/44570681
https://blog.csdn.net/weixin_42323802/article/details/84038765
https://juejin.im/post/5a3284a75188252970793195
如果使用 spring mvc,那 post 请求跟 put 请求有什么区别啊; 然后开始问 springmvc:描述从 tomcat 开始到 springmvc 返回到前端显示的整个流程,接着问 springmvc 中的 handlerMapping 的内部实现,然后又问 spring 中从载入 xml 文件到 getbean 整个流程,描述一遍
jsp就是在html里面写java代码,servlet就是在java里面写html代码…其实jsp经过容器解释之后就是servlet.只是我们自己写代码的时候尽量能让它们各司其职,jsp更注重前端显示,servlet更注重模型和业务逻辑。不要写出万能的jsp或servlet来即可。
作者:知乎用户 链接:https://www.zhihu.com/question/37962386/answer/74906895
jsp/servlet原理:https://www.jianshu.com/p/93736c3b448b
https://blog.csdn.net/qq_24145735/article/details/52433096 https://www.cnblogs.com/chanshuyi/p/5052426.html
https://blog.csdn.net/weixin_42669555/article/details/81049423
https://juejin.im/post/5a75ab4b6fb9a063592ba9db https://blog.csdn.net/shxz130/article/details/39735373
主要说了 native 、uuid
https://blog.csdn.net/itmyhome1990/article/details/54863822
https://zhuanlan.zhihu.com/p/57089960
-
Redis 数据结构
-
Redis 持久化机制
-
Redis 的一致性哈希算法
-
redis了解多少
-
redis五种数据类型,当散列类型的 value 值非常大的时候怎么进行压缩
https://blog.csdn.net/smartwu_sir/article/details/80254733
-
redis 主从复制过程
-
Redis 如何解决 key 冲突
-
redis 是怎么存储数据的
-
redis 使用场景
https://www.jianshu.com/p/e4197a54828d
- zookeeper 的常用功能,自己用它来做什么
mybatis面试题:https://zhuanlan.zhihu.com/p/44464109
https://juejin.im/entry/58f9e22044d9040069d40dca
-
WebSocket 长连接问题
-
如何设计淘宝秒杀系统(重点关注架构,比如数据一致性,数据库集群一致性哈希,缓存, 分库分表等等)
-
List 接口去实例化一个它的实现类(ArrayList)以及直接用 ArrayList 去 new 一个该类的对 象,这两种方式有什么区别
https://juejin.im/post/5ac034f351882548fe4a4383
https://testerhome.com/topics/16082
- 对后台的优化有了解吗?比如负载均衡
我给面试官说了 Ngix+Tomcat 负载均 衡,异步处理(消息缓冲服务器),缓存(Redis, Memcache), NoSQL,数据库优化,存储索引优化
https://www.ruanyifeng.com/blog/2011/09/restful.html
- lrucache 的基本原理
-
单例模式(双检锁模式)、简单工厂、观察者模式、适配器模式、职责链模式等等
-
享元模式模式 选两个画下 UML 图
-
手写单例
写的是静态内部类的单例,然后他问我这个地方为什么用 private,这儿为啥用 static, 这就考察你的基本功啦
-
静态类与单例模式的区别
-
单例模式 double check 单例模式都有什么,都是否线程安全,怎么改进(从 synchronized 到 双重检验锁 到 枚举 Enum)
-
基本的设计模式及其核心思想
-
来,我们写一个单例模式的实现
这里有一个深坑,详情请见《 JVM 》 第 370 页
- 基本的设计原则
如果有人问你接口里的属性为什么都是 final static 的,记得和他聊一聊设计原则。
https://juejin.im/post/5d3f9cc1f265da03a31d1192
https://blog.csdn.net/yixuandong9010/article/details/72286029
https://juejin.im/post/5cbdbb455188250ab224802d
参考文章:https://juejin.im/entry/5a27cb796fb9a045104a5e8c
-
平时怎么写数据库的模糊查询(由字典树扯到模糊查询,前缀查询,例如“abc%”,还是索引策略的问题)
-
数据库里有 10000000 条用户信息,需要给每位用户发送信息(必须发送成功),要求节省内存
-
项目中如何实现事务
https://blog.csdn.net/hsd2012/article/details/51018631
- mysql 用的什么版本 5.7 跟 5.6 有啥区别
https://blog.csdn.net/listen_for/article/details/53907270
- 问了一个这样的表(三个字段:姓名,id,分数)要求查出平均分大于 80 的 id 然后分数降序排序,然后经过提示用聚合函数 avg。
select id from table group by id having avg(score) > 80 order by avg(score) desc。
- 为什么 mysql 事务能保证失败回滚
-
主键索引底层的实现原理 B+树
-
经典的01索引问题?
-
如何在长文本中快捷的筛选出你的名字?
全文索引
-
多列索引及最左前缀原则和其他使用场景
-
事务隔离级别
-
索引的最左前缀原则
-
数据库悲观锁怎么实现的
https://www.jianshu.com/p/f5ff017db62a
-
建表的原则
-
索引的内涵和用法
-
给了两条 SQL 语句,让根据这两条语句建索引(个人想法:主要考虑复合索引只能匹配前缀列的特点)
https://blog.csdn.net/hguisu/article/details/5731880
哈希
-
Sql 语句 分组排序
-
SQL 语句的 5 个连接概念
-
数据库优化和架构(主要是主从分离和分库分表相关)
分库分表
-
跨库join实现
-
探讨主从分离和分库分表相关
-
数据库中间件
-
读写分离在中间件的实现
-
限流 and 熔断
https://cloud.tencent.com/developer/article/1104098
https://mp.weixin.qq.com/s/xSGD3rWdboeeQvaS8jEchw
https://www.cnblogs.com/wuyepeng/p/9801470.html
-
https://www.cnblogs.com/weidagang2046/archive/2011/06/04/idempotence.html
-
建立连接的过程客户端跟服务端会交换什么信息(参考 TCP 报文结构)
https://cloud.tencent.com/developer/article/1195037
https://zhuanlan.zhihu.com/p/36811672
好文:https://www.jianshu.com/p/dfd940e7fca2
服务器推送:https://juejin.im/post/5c20e5766fb9a049b13e387b
可以使用客户端定时刷新请求或者和 TCP 保持心跳连接实现。
https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858810.html
ping命令本身相当于一个应用程序,位于应用层,虽然它使用的是ICMP协议,就好像HTTP位于应用层,但是也是使用的TCP协议
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Redirections
- controller 怎么处理的请求:路由
https://zhuanlan.zhihu.com/p/54593244
其实sed和awk都是每次读入一行来处理的,区别是:sed 适合简单的文本替换和搜索;而awk除了自动给你分列之外,里面丰富的函数大大增强了awk的功能。数据统计,正则表达式搜索,逻辑处理,前后置脚本等。因此基本上sed能做的,awk可以全部完成并且做的更好。
作者:哩掉掉 链接:https://www.zhihu.com/question/297858714/answer/572046422
https://blog.csdn.net/qingmu0803/article/details/38271077
https://blog.csdn.net/zmx19951103/article/details/78575265
https://www.cnblogs.com/freeweb/p/5407105.html
https://blog.csdn.net/inuyashaw/article/details/55095545
- linux 如何查找文件
linux命令:https://juejin.im/post/5d3857eaf265da1bd04f2437
https://juejin.im/post/5b624f4d518825068302aee9#heading-13
- http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
- https://yq.aliyun.com/articles/54155
https://juejin.im/post/5da44c5de51d45783a772a22
https://juejin.im/post/5b39eea0e51d4558c1010e36