├── README.md ├── do-you-really-get-classloaders.pdf ├── interview.md ├── mastering-java-bytecode.pdf └── nio.pdf /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 面试问题收藏 3 | date: 2016-09-19 23:58:35 4 | tags: 5 | --- 6 | [TOC] 7 | 8 | # 面试问题收藏 9 | 这些是我最近想到的一些问题,比较基础。回答的不一定完全准确,一些自己还不是很明白,需要思考学习。 10 | 11 | # 计算机基础方面 12 | ## 网络 13 | ### TCP/IP协议是什么 14 | TCP/IP是指由TCP、UDP、IP、ICMP等协议组成的协议簇 15 | ### TCP握手过程、关闭和状态变化,对应到程序中是哪些函数调用 16 | 常说的三次握手,四次挥手。还是用图来表示最清楚了。 17 | 18 | ### TCP和UDP的区别 19 | TCP: 面向连接,提供可靠性机制 20 | UDP: 不保证可靠性 21 | ### IP层的作用 22 | IP层负责主机路由 23 | TCP层负责端到端的传输,主机上的每个程序都可以是一个端。用一个端口号表示。 24 | ### TCP层和IP层的区别 25 | TCP层在IP层的基础上,增加了校验位验证数据完整性,为每个字节分配一个一个序列号,这样可以在数据包不按顺序到达目的地时可以重新组合,另外还提供了确认和重传的机制来提高数据到达可靠性, 26 | ### tcpdump、wireshark使用 27 | tcpdump -i eth1 tcp port 2222 and src 122.222.22 28 | wireshark界面和命令行 29 | 30 | ### ping命令使用了哪些协议 31 | ICMP UDP 32 | ### ARP和RARP 33 | ip和网卡地址的互相解析 34 | ### Connection reset by peer的原因, RST包发生的时机。 35 | 表示连接错误,一般发生的原因有 36 | 37 | * 对方设置SO_LINGER为启用且到时了,对方会发送一个RST包,表示连接已经被重置,对方的端口不会表示成TIME_WAIT状态 38 | * 中间如果有代理服务,代理服务可能会判断连接会话超时,同时向双方发送RST 39 | * RST包: 在向一个没有监听的端口发送SYN时,也会返回 40 | 41 | 42 | ### TCP 连接参数 TCP_NO_DELAY, TCP_KEEPALIVE, TCP_SO_LINGER 43 | NO_DELAY是是否启用Nagle,TODO 44 | ### TCP延迟确认 200ms问题 45 | TODO 46 | ### HTTP协议 47 | 文本传输协议 48 | ### HTTP请求过程。 49 | DNS解析域名到ip映射 50 | 获得ip后通过ip和端口号请求 51 | 依次通过TCP、IP层 52 | 链路层传输到下一个主机,MAC地址是下一站的MAC地址 53 | ### DNS是什么 54 | domain naming service 55 | 解析域名到ip地址 56 | ### HTTPS是什么,HTTPS握手过程,对称加密、非对称加密是什么,有哪些加密算法。 57 | http over SSL/TLS 58 | 59 | ### NGINX是什么,负载均衡原理,负载均衡算法 60 | 反向代理、负载均衡 61 | 62 | ## 操作系统 63 | 64 | ### 操作系统的作用 65 | ### 进程作用,进程切换需要保存哪些内容 66 | ### 线程和协程 67 | ### 内核空间 68 | ### IO 69 | 70 | 71 | ## 数据结构 72 | ### 链表 73 | ### 树 74 | ### 倒排索引 75 | 76 | ## 算法 77 | ### 排序算法 78 | 79 | 80 | 81 | ### 常用的linux命令 82 | #### 日常操作 83 | * cp 84 | * mv 85 | * ls ll 86 | * grep 87 | * | 88 | * cat less head tail 89 | * vim 操作 90 | * scp 91 | * awk 92 | * sort uniq 93 | * nc 94 | 95 | 96 | #### 监控类 97 | * top 98 | * uptime 99 | * sar 100 | * ps 101 | * dstat 102 | * vmstat 103 | * iostat 104 | * df 105 | * du 106 | * ss 107 | * netstat 108 | * lsof 109 | 110 | ### java的命令 111 | jdk bin目录下的工具 112 | 113 | 114 | ## Java方面 115 | 116 | ### HashMap的内部实现 117 | HashMap是Map的一个实现,内部数据结构通常是数组,数组的元素通常是链表,链表的元素是key-value的键值对。通过hash函数将key映射到一个hash值,这个hash值可以用来路由到具体的数组上。JDK8后会在链表长度达到一定长度后转换成一个红黑树。当HashMap存储的元素较多时,会造成链表比较长,这样get和put等操作的时间会增加,所以HashMap需要动态扩容,规则是HashMap中有一个capacity值和loadFactor值,现版本默认分别是16和0.75,capacity就是内部数组的大小,当Map的数据也就是键值对的数量超过capacity * loadFactor时就会进行resize或叫rehash,会创建一个2*capacity的数组,并将旧数组的内容转移到新数组上。 118 | 119 | ### HashMap、HashTable、ConcurrentHashMap 120 | 通常意义上讲HashMap不是线程安全的,HashTable是线程安全的,原因是HashMap中的并发resize()操作可能导致Node数据引用错误,甚至出现死循环,并且Node中的value和next没有使用volatile声明也没有其他加锁等可见性保证,所以在并发使用HashMap时必须要在外层加锁。HashTable解决了这个问题是通过将其对外方法上都加上了synchronized关键字在实例对象上加锁来维护数据一致性、可见性来实现线程安全的。但是即使是这样在putIfAbsent等操作还是需要外部加锁。由于HashTable将方法都加锁,导致操作都是串行执行的,性能不佳。ConcurrentHashMap是java.util.concurrent包中的一种并发集合,用来替代HashTable成为线程安全的HashMap,替代的是HashTable的线程安全语义而不是它的synchronize同步语义。ConcurrentHashMap中读不加锁,写入时采取分段锁,将锁的粒度拆小到每个数组上,这样大大减少了锁冲突,并且有Node中使用volatile等其他可见性保证。 121 | 122 | ### 动态代理 123 | 静态代理是指手动实现一个接口或继承一个类,并将方法转发到其他的实现上,并在其上包装一些其他功能,如打日志、认证等。这样的方式缺点是需要给每个类都写一个代理,耦合严重且繁琐易出错。 124 | 动态代理可以在运行时生成或替换对应接口的实现, 常见的动态代理技术有jdk Proxy, CGlib, ASM字节码增强等。jdk Proxy主要依靠java.lang.reflect.Proxy。 125 | JDK Proxy 参考链接 126 | * https://docs.oracle.com/javase/8/docs/technotes/guides/reflection/proxy.html 127 | * http://rejoy.iteye.com/blog/1627405 128 | * https://opencredo.com/dynamic-proxies-java-part-2/ 129 | 130 | ## Java字节码、jvm相关 131 | 132 | ### jvm是什么,作用是什么 133 | java virtual machine 134 | Java运行bytecode的地方,通过JVM抽象,可以实现平台无关性,一次编写到处运行(write once, run everywhere or write one, debug everywhere) 135 | 字节码这一层抽象也实现了语言无关性,只要能够编译出符合JVM规范的字节码,无论是scala、groovy等语言的代码都能在JVM上运行 136 | 137 | ### 收集器和垃圾收集算法 138 | 139 | 140 | ### 动态代理有哪些方式 141 | 142 | ### java运行时内存分布 143 | 144 | ### java class文件结构 145 | * u2 magiccode 146 | * u2 minor version 147 | * u2 major version 148 | * u2 constant pool count 149 | * constant pool[constant pool count -1] 150 | * access flag 151 | * this class 152 | * super class 153 | * interface count 154 | * [count] interfaces 155 | * field count 156 | * [count] fields 157 | * method count 158 | * [count] methods 159 | * attributes 160 | 161 | 162 | ### java 字节码指令集包括哪些 163 | #### 操作数栈与局部变量操作 164 | * aload_0 165 | * astore_0 166 | * iconst_0 167 | * bipush 100 168 | * pop 169 | * swap 170 | * dup, dup_x1 171 | * inc 172 | * getfield 173 | * putfield 174 | * getstatic 175 | * putstatic 176 | 177 | 178 | #### 方法调用 179 | * invokestatic 调用静态方法 180 | * invokevirtual 调用虚方法,动态分派 181 | * invokespecial 调用构造器,私有方法,父类方法 182 | * invokeinterface 调用接口方法 183 | * invokedynamic java7增加的动态语言特性TODO 184 | 185 | #### 运算 186 | * iadd 187 | * TODO 188 | 189 | #### 流程控制 190 | * goto 191 | * ifcom TODO 192 | 193 | #### 类操作 194 | * new 195 | * check instance 196 | * cast TODO 197 | 198 | 199 | ### ClassLoader, Class关系,Class的加载、验证、准备、解析、初始化 200 | 201 | ### java 如何实现多态 202 | 203 | ### 如何实现动态加载、热部署 204 | 205 | ### 收藏资料 206 | #### JRebel发布的 207 | * [mastering java bytecode](https://github.com/liuzhengyang/interview/blob/master/mastering-java-bytecode.pdf) 208 | * [do you really get classloader](https://github.com/liuzhengyang/interview/blob/master/do-you-really-get-classloaders.pdf) 209 | * [Jrebel的实验室](http://zeroturnaround.com/rebellabs/) 210 | 211 | ## java语言 212 | 213 | ### java优点和缺点 214 | 215 | ### java集合框架有哪些类 216 | 217 | ### java并发集合框架,原子类,Executor 218 | 219 | ### AQS, Future, Lock, Semaphore等。 220 | 221 | ### Java线程状态 222 | 223 | ### 多线程的需要注意的地方 224 | 原子、可见性、重排序。 225 | 性能,死锁。 226 | 偏向锁、轻量级锁、自旋锁、重量级锁。 227 | ### 实现异步等待的方式 228 | 229 | 230 | ## IO 231 | ### 字节流的概念,网络中传输的都是字节流 232 | ### 字符集 233 | ### 文件操作 234 | ### BIO和NIO区别,阻塞的含义 235 | read write 236 | 阻塞需要单独一个线程来负责一个连接,非阻塞可以更很少的线程来管理 237 | ### Channel, Selector, ByteBuffer 238 | ServerSocketChannel, SocketChannel 239 | SelectionKey 240 | ByteBuffer clear, position, limit, flip, remaining等 241 | * 推荐Doug Lea的nio.pdf * 242 | ### 异步IO 243 | Future, Listener 244 | ### Netty 245 | netty是什么 246 | 非阻塞的、事件驱动的快速网络开发框架,很快的开发出健壮高效的网络应用。 247 | netty结构 248 | 大体包括Bootstrap启动模块 249 | ChannelHandler 中实现我们的业务逻辑,或者一些Codec编码解码器 250 | Channel 代表一个连接 251 | ChannelPipeline, 每个Channel会有一个ChannelPipeline 252 | ChannelHandlerContext, pipeline和handler关联起来 253 | ByteBuf Netty里的ByteBuffer实现 254 | 255 | ### 收藏资料 256 | * [Doug Lea的一个ppt](https://github.com/liuzhengyang/interview/blob/master/nio.pdf) 257 | * 258 | 259 | ### Jetty Tomcat 260 | Servlet的作用,Servlet生命周期 261 | Jetty结构,Jetty启动过程,一个请求从接收到返回的中间步骤 262 | 263 | ### Redis 264 | redis 数据结构 265 | redis 数据结构实现 266 | redis cluster 267 | redis 实现计数器 268 | redis 实现缓存,缓存如何失效,缓存一致性,如何保证缓存和数据库的一致性 269 | redis 实现发布订阅 270 | redis 实现报警,判断一分钟达到阈值 271 | ## MQ 272 | kafka,rabbitmq 273 | 274 | 275 | ## 延迟队列 276 | rabbitmq、activemq, redis实现,beanstalk 277 | 278 | ## 日志收集监控 279 | 280 | ## Spring 281 | ### Spring是什么,Spring作用 282 | ### 常说的IOC和AOP是什么,作用。 283 | ### Spring 启动过程, Spring Bean加载过程和处理过程 BeanPostProcessor 284 | ### Spring如何实现生命式事务的 285 | ### Spring如何实现Aspect AOP的 286 | ### Spring MVC结构,一个http request在spring中是如何流转的 287 | ### spring boot 288 | 289 | ## 数据库 290 | ### 事务是什么、作用 291 | ### 事务的几个特点 ACID 292 | ### mysql 存储引擎 293 | ### mysql默认隔离级别 294 | ### innodb 索引,B-Tree,B+Tree 结构 295 | 主键、索引、数据存储方式 296 | ### 索引的最左匹配原则、聚簇索引、非聚簇索引。覆盖索引。 297 | ### explain, full scan, tmp file. file sort. join .in. 298 | ### 字段选择,int, bigint, varchar, char, datetime 299 | ### 锁范围,行级锁,表级锁,锁索引。间隙锁(Gap).全表扫描 300 | 301 | 302 | 303 | 304 | # 书籍记录 305 | # 强烈推荐 306 | * Java并发编程实践 307 | * 深入理解Java虚拟机 308 | * java虚拟机规范7、8 309 | * 高性能mysql 310 | * TCP/IP详解 311 | * Netty In Action(英文版的) 312 | * 计算机程序的构造与解释 313 | 314 | # 推荐 315 | * Clean Code( 代码整洁知道) 316 | * EffectiveJava 317 | * 重构( 我刚看了一点,羞愧,要补一补) 318 | * Thinking In Java( 我刚看了一点,羞愧,要补一补) 319 | * 代码大全 320 | 321 | # 比较推荐的书籍 322 | * 大型网站xxx(淘宝出的一些书,技术演进等等,能对互联网常用技术、发展有一个大概了解) 323 | * Spring揭秘 324 | * 325 | * 从Paxos到Zookeeper 326 | * Go语言编程 327 | * Java并发编程的艺术 328 | * Docker的一些书(介绍用就可以了,主要靠实践) 329 | * 深入分析javaWeb内幕 330 | 331 | # 拓展视野的书籍 332 | * 软技能 333 | * 人月神话 334 | * 335 | 336 | 337 | 338 | # 选择读的书籍(一般推荐,有时间读一读) 339 | * Java特种兵 340 | * ElasticSearch服务器开发 341 | * Spring 3.x 企业应用开发 342 | * spring技术内幕 343 | 344 | 345 | 346 | -------------------------------------------------------------------------------- /do-you-really-get-classloaders.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuzhengyang/interview/85cee9b81b1d9e94e5a8614a1d4492423134fd96/do-you-really-get-classloaders.pdf -------------------------------------------------------------------------------- /interview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 面试问题收藏 3 | date: 2016-09-19 23:58:35 4 | tags: 5 | --- 6 | [TOC] 7 | 8 | # 面试问题收藏 9 | 这些是我最近想到的一些问题,比较基础。回答的不一定完全准确,一些自己还不是很明白,需要思考学习。 10 | 11 | # 计算机基础方面 12 | ## 网络 13 | ### TCP/IP协议是什么 14 | TCP/IP是指由TCP、UDP、IP、ICMP等协议组成的协议簇 15 | ### TCP握手过程、关闭和状态变化,对应到程序中是哪些函数调用 16 | 常说的三次握手,四次挥手。还是用图来表示最清楚了。 17 | 18 | ### TCP是怎么保证可靠性的 19 | 超时重连 20 | ### TCP和UDP的区别 21 | TCP: 面向连接,提供可靠性机制 22 | UDP: 不保证可靠性 23 | ### IP层的作用 24 | IP层负责主机路由 25 | TCP层负责端到端的传输,主机上的每个程序都可以是一个端。用一个端口号表示 26 | ### tcpdump、wireshark使用 27 | tcpdump -i eth1 tcp port 2222 and src 122.222.22 28 | wireshark界面和命令行 29 | 30 | ### ping命令使用了哪些协议 31 | ICMP UDP 32 | ### ARP和RARP 33 | ip和网卡地址的互相解析 34 | ### Connection reset by peer的原因, RST包发生的时机。 35 | 表示连接错误,一般发生的原因有 36 | 37 | * 对方设置SO_LINGER为启用且到时了,对方会发送一个RST包,表示连接已经被重置,对方的端口不会表示成TIME_WAIT状态 38 | * 中间如果有代理服务,代理服务可能会判断连接会话超时,同时向双方发送RST 39 | * RST包: 在向一个没有监听的端口发送SYN时,也会返回 40 | 41 | 42 | ### TCP 连接参数 TCP_NO_DELAY, TCP_KEEPALIVE, TCP_SO_LINGER 43 | NO_DELAY是是否启用Nagle,TODO 44 | ### TCP延迟确认 200ms问题 45 | TODO 46 | ### HTTP协议 47 | 文本传输协议 48 | ### HTTP请求过程。 49 | DNS解析域名到ip映射 50 | 获得ip后通过ip和端口号请求 51 | 依次通过TCP、IP层 52 | 链路层传输到下一个主机,MAC地址是下一站的MAC地址 53 | ### DNS是什么 54 | domain naming service 55 | 解析域名到ip地址 56 | ### HTTPS是什么,HTTPS握手过程,对称加密、非对称加密是什么,有哪些加密算法。 57 | http over SSL/TLS 58 | 59 | ### NGINX是什么,负载均衡原理,负载均衡算法 60 | 反向代理、负载均衡 61 | 62 | ## 操作系统 63 | 64 | ### 操作系统的作用 65 | ### 进程作用,进程切换需要保存哪些内容 66 | ### 线程和协程 67 | ### 内核空间 68 | ### IO 69 | 70 | 71 | ## 数据结构 72 | ### 链表 73 | ### 树 74 | ### 倒排索引 75 | 76 | ## 算法 77 | ### 排序算法 78 | 79 | 80 | 81 | ## Java方面 82 | 83 | ### HashMap的内部实现 84 | HashMap是Map的一个实现,内部数据结构通常是数组,数组的元素通常是链表,链表的元素是key-value的键值对。通过hash函数将key映射到一个hash值,这个hash值可以用来路由到具体的数组上。JDK8后会在链表长度达到一定长度后转换成一个红黑树。当HashMap存储的元素较多时,会造成链表比较长,这样get和put等操作的时间会增加,所以HashMap需要动态扩容,规则是HashMap中有一个capacity值和loadFactor值,现版本默认分别是16和0.75,capacity就是内部数组的大小,当Map的数据也就是键值对的数量超过capacity * loadFactor时就会进行resize或叫rehash,会创建一个2*capacity的数组,并将旧数组的内容转移到新数组上。 85 | 86 | ### HashMap、HashTable、ConcurrentHashMap 87 | 通常意义上讲HashMap不是线程安全的,HashTable是线程安全的,原因是HashMap中的并发resize()操作可能导致Node数据引用错误,甚至出现死循环,并且Node中的value和next没有使用volatile声明也没有其他加锁等可见性保证,所以在并发使用HashMap时必须要在外层加锁。HashTable解决了这个问题是通过将其对外方法上都加上了synchronized关键字在实例对象上加锁来维护数据一致性、可见性来实现线程安全的。但是即使是这样在putIfAbsent等操作还是需要外部加锁。由于HashTable将方法都加锁,导致操作都是串行执行的,性能不佳。ConcurrentHashMap是java.util.concurrent包中的一种并发集合,用来替代HashTable成为线程安全的HashMap,替代的是HashTable的线程安全语义而不是它的synchronize同步语义。ConcurrentHashMap中读不加锁,写入时采取分段锁,将锁的粒度拆小到每个数组上,这样大大减少了锁冲突,并且有Node中使用volatile等其他可见性保证。 88 | > The basic strategy is to subdivide the table among Segments, 89 | each of which itself is a concurrently readable hash table. To 90 | reduce footprint, all but one segments are constructed only 91 | when first needed (see ensureSegment). To maintain visibility 92 | in the presence of lazy construction, accesses to segments as 93 | well as elements of segment's table must use volatile access, 94 | which is done via Unsafe within methods segmentAt etc 95 | below. These provide the functionality of AtomicReferenceArrays 96 | but reduce the levels of indirection. Additionally, 97 | volatile-writes of table elements and entry "next" fields 98 | within locked operations use the cheaper "lazySet" forms of 99 | writes (via putOrderedObject) because these writes are always 100 | followed by lock releases that maintain sequential consistency 101 | of table updates. 102 | 103 | Historical note: The previous version of this class relied 104 | heavily on "final" fields, which avoided some volatile reads at 105 | the expense of a large initial footprint. Some remnants of 106 | that design (including forced construction of segment 0) exist 107 | to ensure serialization compatibility. 108 | 109 | ### 常用的linux命令 110 | #### 日常操作 111 | * cp 112 | * mv 113 | * ls ll 114 | * grep 115 | * | 116 | * cat less head tail 117 | * vim 操作 118 | * scp 119 | * awk 120 | * sort uniq 121 | * nc 122 | 123 | 124 | #### 监控类 125 | * top 126 | * uptime 127 | * sar 128 | * ps 129 | * dstat 130 | * vmstat 131 | * iostat 132 | * df 133 | * du 134 | * ss 135 | * netstat 136 | * lsof 137 | 138 | ### java的命令 139 | jdk bin目录下的工具 140 | 141 | 142 | ## Java字节码、jvm相关 143 | 144 | ### jvm是什么,作用是什么 145 | java virtual machine 146 | Java运行bytecode的地方,通过JVM抽象,可以实现平台无关性,一次编写到处运行(write once, run everywhere or write one, debug everywhere) 147 | 字节码这一层抽象也实现了语言无关性,只要能够编译出符合JVM规范的字节码,无论是scala、groovy等语言的代码都能在JVM上运行 148 | 149 | ### 收集器和垃圾收集算法 150 | 151 | 152 | ### 动态代理有哪些方式 153 | 154 | ### java运行时内存分布 155 | 156 | ### java class文件结构 157 | * u2 magiccode 158 | * u2 minor version 159 | * u2 major version 160 | * u2 constant pool count 161 | * constant pool[constant pool count -1] 162 | * access flag 163 | * this class 164 | * super class 165 | * interface count 166 | * [count] interfaces 167 | * field count 168 | * [count] fields 169 | * method count 170 | * [count] methods 171 | * attributes 172 | 173 | 174 | ### java 字节码指令集包括哪些 175 | #### 操作数栈与局部变量操作 176 | * aload_0 177 | * astore_0 178 | * iconst_0 179 | * bipush 100 180 | * pop 181 | * swap 182 | * dup, dup_x1 183 | * inc 184 | * getfield 185 | * putfield 186 | * getstatic 187 | * putstatic 188 | 189 | 190 | #### 方法调用 191 | * invokestatic 调用静态方法 192 | * invokevirtual 调用虚方法,动态分派 193 | * invokespecial 调用构造器,私有方法,父类方法 194 | * invokeinterface 调用接口方法 195 | * invokedynamic java7增加的动态语言特性TODO 196 | 197 | #### 运算 198 | * iadd 199 | * TODO 200 | 201 | #### 流程控制 202 | * goto 203 | * ifcom TODO 204 | 205 | #### 类操作 206 | * new 207 | * check instance 208 | * cast TODO 209 | 210 | 211 | ### ClassLoader, Class关系,Class的加载、验证、准备、解析、初始化 212 | 213 | ### java 如何实现多态 214 | 215 | ### 如何实现动态加载、热部署 216 | 217 | ### 收藏资料 218 | #### JRebel发布的 219 | * [mastering java bytecode](https://github.com/liuzhengyang/interview/blob/master/mastering-java-bytecode.pdf) 220 | * [do you really get classloader](https://github.com/liuzhengyang/interview/blob/master/do-you-really-get-classloaders.pdf) 221 | * [Jrebel的实验室](http://zeroturnaround.com/rebellabs/) 222 | 223 | ## java语言 224 | 225 | ### java优点和缺点 226 | 227 | ### java集合框架有哪些类 228 | 229 | ### java并发集合框架,原子类,Executor 230 | 231 | ### AQS, Future, Lock, Semaphore等。 232 | 233 | ### Java线程状态 234 | 235 | ### 多线程的需要注意的地方 236 | 原子、可见性、重排序。 237 | 性能,死锁。 238 | 偏向锁、轻量级锁、自旋锁、重量级锁。 239 | ### 实现异步等待的方式 240 | 241 | 242 | ## IO 243 | ### 字节流的概念,网络中传输的都是字节流 244 | ### 字符集 245 | ### 文件操作 246 | ### BIO和NIO区别,阻塞的含义 247 | read write 248 | 阻塞需要单独一个线程来负责一个连接,非阻塞可以更很少的线程来管理 249 | ### Channel, Selector, ByteBuffer 250 | ServerSocketChannel, SocketChannel 251 | SelectionKey 252 | ByteBuffer clear, position, limit, flip, remaining等 253 | * 推荐Doug Lea的nio.pdf * 254 | ### 异步IO 255 | Future, Listener 256 | ### Netty 257 | netty是什么 258 | 非阻塞的、事件驱动的快速网络开发框架,很快的开发出健壮高效的网络应用。 259 | netty结构 260 | 大体包括Bootstrap启动模块 261 | ChannelHandler 中实现我们的业务逻辑,或者一些Codec编码解码器 262 | Channel 代表一个连接 263 | ChannelPipeline, 每个Channel会有一个ChannelPipeline 264 | ChannelHandlerContext, pipeline和handler关联起来 265 | ByteBuf Netty里的ByteBuffer实现 266 | 267 | ### 收藏资料 268 | * [Doug Lea的一个ppt](https://github.com/liuzhengyang/interview/blob/master/nio.pdf) 269 | * 270 | 271 | ### Jetty Tomcat 272 | Servlet的作用,Servlet生命周期 273 | Jetty结构,Jetty启动过程,一个请求从接收到返回的中间步骤 274 | 275 | ### Redis 276 | redis 数据结构 277 | redis 数据结构实现 278 | redis cluster 279 | redis 实现计数器 280 | redis 实现缓存,缓存如何失效,缓存一致性,如何保证缓存和数据库的一致性 281 | redis 实现发布订阅 282 | redis 实现报警,判断一分钟达到阈值 283 | ## MQ 284 | kafka,rabbitmq 285 | 286 | 287 | ## 延迟队列 288 | rabbitmq、activemq, redis实现,beanstalk 289 | 290 | ## 日志收集监控 291 | 292 | ## Spring 293 | ### Spring是什么,Spring作用 294 | ### 常说的IOC和AOP是什么,作用。 295 | ### Spring 启动过程, Spring Bean加载过程和处理过程 BeanPostProcessor 296 | ### Spring如何实现生命式事务的 297 | ### Spring如何实现Aspect AOP的 298 | ### Spring MVC结构,一个http request在spring中是如何流转的 299 | ### spring boot 300 | 301 | ## 数据库 302 | ### 事务是什么、作用 303 | ### 事务的几个特点 ACID 304 | ### mysql 存储引擎 305 | ### mysql默认隔离级别 306 | ### innodb 索引,B-Tree,B+Tree 结构 307 | 主键、索引、数据存储方式 308 | ### 索引的最左匹配原则、聚簇索引、非聚簇索引。覆盖索引。 309 | ### explain, full scan, tmp file. file sort. join .in. 310 | ### 字段选择,int, bigint, varchar, char, datetime 311 | ### 锁范围,行级锁,表级锁,锁索引。间隙锁(Gap).全表扫描 312 | 313 | 314 | 315 | 316 | # 书籍记录 317 | # 强烈推荐 318 | * Java并发编程实践 319 | * 深入理解Java虚拟机 320 | * java虚拟机规范7、8 321 | * 高性能mysql 322 | * TCP/IP详解 323 | * Netty In Action(英文版的) 324 | * 计算机程序的构造与解释 325 | 326 | # 推荐 327 | * Clean Code( 代码整洁知道) 328 | * EffectiveJava 329 | * 重构( 我刚看了一点,羞愧,要补一补) 330 | * Thinking In Java( 我刚看了一点,羞愧,要补一补) 331 | * 代码大全 332 | 333 | # 比较推荐的书籍 334 | * 大型网站xxx(淘宝出的一些书,技术演进等等,能对互联网常用技术、发展有一个大概了解) 335 | * Spring揭秘 336 | * 337 | * 从Paxos到Zookeeper 338 | * Go语言编程 339 | * Java并发编程的艺术 340 | * Docker的一些书(介绍用就可以了,主要靠实践) 341 | * 深入分析javaWeb内幕 342 | 343 | # 拓展视野的书籍 344 | * 软技能 345 | * 人月神话 346 | * 347 | 348 | 349 | 350 | # 选择读的书籍(一般推荐,有时间读一读) 351 | * Java特种兵 352 | * ElasticSearch服务器开发 353 | * Spring 3.x 企业应用开发 354 | * spring技术内幕 355 | 356 | -------------------------------------------------------------------------------- /mastering-java-bytecode.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuzhengyang/interview/85cee9b81b1d9e94e5a8614a1d4492423134fd96/mastering-java-bytecode.pdf -------------------------------------------------------------------------------- /nio.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuzhengyang/interview/85cee9b81b1d9e94e5a8614a1d4492423134fd96/nio.pdf --------------------------------------------------------------------------------