春节后将会迎来一年一度的跳槽季,撸起袖子加油干!此篇文章是个大纲贴,接下来的每一天都会按里面的内容一点一点详细展开,不要走开哟~
- Servlet:理解Web容器基于Servlet规范;理解重定向和转发;理解生命周期;会用Servlet编写接
- Filter:过滤器
- Listenner:监听器
- Ioc:会使用Xml或注解配置Spring对象;了解Spring是如何创建对象的,如何解决循环依赖,会配置对象。
- Aop:实现原理:JDK动态代理、修改字节码;使用场景:日志记录,跟踪,优化和监控。事务的处理,dao查询数据库;系统统一的认证、权限管理等;应用系统的异常捕捉及处理;针对具体行业应用的横切行为;会用切面统一处理日志、权限。
- 注解:AutoWired、Controller、Service、RequestMapping、RequestParam、Resource、Value、RequestBody、ResponseBody等等。
- SpringMvc:会用Spring 拦截器;了解请求参数组装,返回参数组装原理;了解请求从Web容器到
- Controller之间,SpringMvc是如何处理一个请求的
- Mybatis:会用Xml编写Sql,了解#{}和${}的区别;了解Dao接口如何实现Xml的sql语句;了解Mybatis拦截器;理解事务和隔离级别;理解连接池以及配置参数;自己实现一个连接池
- Hystrix:拥有监控、限流、熔断的思维
- 了解InnoDB和Mysiam。
- 了解Mysql架构:sql语句如何被编译到执行取数。
- 掌握一般的Sql优化技巧。
- 理解事务:未提交读、提交读、重复读、幻读、串行化,MVCC并发版本控制。redo、undo
- 理解锁:行锁、表锁、数据库分布式锁、锁优化,会用行锁/乐观锁优化掉分布式锁。
- 多版本并发控制MVCC,理解InnoDB是如何操作的
- 建表规范:流水表的时间唯独要加冗余字段-年/月/日/周/时;建索引前,要先考虑是否合适;尽量不要使用null字段;建表/加字段时要不能仅仅考虑到添加和修改,还要考虑到查询的sql是否简单;月流水少于1000万的或月表小于1G的不要分表,更不要分区
- 分布式:主从,binlog、keepalive
熟练掌握单例;理解装饰器模式;理解迭代器模式;了解命令模式;了解工厂模式
1.基本类型:理解自动装箱拆箱;理解整型、字符串常量池,会正确比较两个整型对象;数量掌握字符串的操作;理解hashCode和equals方法以及使用场景;只要重写 equals,就必须重写 hashCode。
2.集合
(1)list:arrayList:理解扩容机制以及CRUD性能;linkedList:理解链表相对于数组的高效使用场景。
(2)map:HashMap:理解底层是数组+红黑树的结构,put与get执行原理;TreeMap:了解和HashMap的区别,有序性;ConcurrentHashMap:了解线程安全,以及相对于hashTable实现的高性能原因;LinkedHashMap:了解用双向链表维护的顺序。自定义对象作为key必须重写equas和hashcode方法(3)set:HashSet;TreeSet;LinkedHashSet
3.工具类:Arrays:会使用;Collections;会使用,理解排序,差集交集等底层实现方式。
4.IO
(1)BIO:Input/OutputStream,理解装饰器模式,BufferedInputStream,FileInputStream, ByteArrayInputStream;Reader:会使用他或者Stream读写文件;File:会创建删除文件。
(2)NIO:了解和BIO的区别在于一个是基于流的一个是基于缓冲区的;了解基于缓冲区的NIO可以随意移动文件指针而流只能一个个字节读取;因为性能问题,和hashcode在不同机器上值不同的原因, ArrayList和HashSet、HashMap用trasient过滤默认序列化的字段,重写read、writeObj方法
5.多线程/多进程
(1)锁:会使用方法上的,块上的Synchronized锁;了解Lock接口。
(2)锁类别与场景
<1>自旋锁:持有锁的时间极短的情况下,让cpu停顿/睡眠比切换上下文的开销更小。实现:CAS自旋volatile变量
<2>读写锁:内存黑名单,读大于写但是又不想让读写互斥,采用读写分开加锁的方式,效率更高。
<3>公平锁:FIFO模式,会导致饥饿
<4>非公平锁:可能导致第一个进来的线程最后一个获得锁
<5>悲观锁 :假设每次都会产生竞争,因此每次都加锁
<6>乐观锁:假设很少情况下会产生竞争,因此每次都不加锁,但是竞争情况下只有某一次能成功,这取决于你的实现。
<7>偏向锁:大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,因此只让该线程获取锁,若突然有其他线程获取锁则发生锁升级。实现:默认忽略锁,但在CAS失败后自动切换成加锁模式。
<8>分段锁:根据对象最分区,对不同的分区加不同的锁,比如ConcurrentHashMap的实现。
<9>轻量级锁:偏向锁升级成自旋锁,实际上还是不用获取锁。
<10>重量级锁:最低性能的锁,线程每次访问加锁区域都会获取锁。
6.锁粗化/锁消除
粗化:JVM探测到在某个循环中重复加锁,就会把锁粗化到更高的范围,比如方法级。
消除:JVM探测到某个加锁块不可能被其他线程访问到,就消除锁。
7.死锁。多个线程加锁顺序必须一致。
8.线程接口:Runnable;Callable;Thread
9.异常:运行时异常;非运行时异常
- 内存模型:栈和堆;堆和常量池(-128 ~ 127 的int常量池和String常量池)
- 理解:堆划分;新生代;Eden;Survivor1;Survivor2;老年代;元数据区
- volatile:了解可见性、顺序性。
- GC:了解CMS,Parallel,ParNew等收集器,以及使用场景
- 内存分配/释放
- 数据一致性:paxos,zab,2,3阶段提交,tcc,try confirm commit,补偿,查询模式,冲正接口
- 事务:ACID 原子性,一致性,隔离性,持久性
- 选举
- CAP
C (一致性):对某个指定的客户端来说,读操作能返回最新的写操作。
A (可用性):非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。可用性的两个关键一个是合理的时间,一个是合理的响应。
P (分区容错性):当出现网络分区后,系统能够继续工作。打个比方,这里集群有多台机器,有台机器网络出现了问题,但是这个集群仍然可以正常工作。
CP系统,放弃可用性,也就是一段时间内无响应,比如zookeeper。
- tcp:三次握手、四次挥手;ack
- udp
- netty:拆包粘包channel;pipeline;bossThreads;workerThreads
线性表;树;图;排序;查找
本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/272083.html