首页 > 科技 > 月薪5万的java程序猿必备

月薪5万的java程序猿必备


春节后将会迎来一年一度的跳槽季,撸起袖子加油干!此篇文章是个大纲贴,接下来的每一天都会按里面的内容一点一点详细展开,不要走开哟~

  1. Servlet:理解Web容器基于Servlet规范;理解重定向和转发;理解生命周期;会用Servlet编写接
  2. Filter:过滤器
  3. Listenner:监听器
  4. Ioc:会使用Xml或注解配置Spring对象;了解Spring是如何创建对象的,如何解决循环依赖,会配置对象。
  5. Aop:实现原理:JDK动态代理、修改字节码;使用场景:日志记录,跟踪,优化和监控。事务的处理,dao查询数据库;系统统一的认证、权限管理等;应用系统的异常捕捉及处理;针对具体行业应用的横切行为;会用切面统一处理日志、权限。
  6. 注解:AutoWired、Controller、Service、RequestMapping、RequestParam、Resource、Value、RequestBody、ResponseBody等等。
  7. SpringMvc:会用Spring 拦截器;了解请求参数组装,返回参数组装原理;了解请求从Web容器到
  8. Controller之间,SpringMvc是如何处理一个请求的
  9. Mybatis:会用Xml编写Sql,了解#{}和${}的区别;了解Dao接口如何实现Xml的sql语句;了解Mybatis拦截器;理解事务和隔离级别;理解连接池以及配置参数;自己实现一个连接池
  10. Hystrix:拥有监控、限流、熔断的思维

  1. 了解InnoDB和Mysiam。
  2. 了解Mysql架构:sql语句如何被编译到执行取数。
  3. 掌握一般的Sql优化技巧。
  4. 理解事务:未提交读、提交读、重复读、幻读、串行化,MVCC并发版本控制。redo、undo
  5. 理解锁:行锁、表锁、数据库分布式锁、锁优化,会用行锁/乐观锁优化掉分布式锁。
  6. 多版本并发控制MVCC,理解InnoDB是如何操作的
  7. 建表规范:流水表的时间唯独要加冗余字段-年/月/日/周/时;建索引前,要先考虑是否合适;尽量不要使用null字段;建表/加字段时要不能仅仅考虑到添加和修改,还要考虑到查询的sql是否简单;月流水少于1000万的或月表小于1G的不要分表,更不要分区
  8. 分布式:主从,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.异常:运行时异常;非运行时异常

  1. 内存模型:栈和堆;堆和常量池(-128 ~ 127 的int常量池和String常量池)
  2. 理解:堆划分;新生代;Eden;Survivor1;Survivor2;老年代;元数据区
  3. volatile:了解可见性、顺序性。
  4. GC:了解CMS,Parallel,ParNew等收集器,以及使用场景
  5. 内存分配/释放
  1. 数据一致性:paxos,zab,2,3阶段提交,tcc,try confirm commit,补偿,查询模式,冲正接口
  2. 事务:ACID 原子性,一致性,隔离性,持久性
  3. 选举
  4. CAP

C (一致性):对某个指定的客户端来说,读操作能返回最新的写操作。

A (可用性):非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。可用性的两个关键一个是合理的时间,一个是合理的响应。

P (分区容错性):当出现网络分区后,系统能够继续工作。打个比方,这里集群有多台机器,有台机器网络出现了问题,但是这个集群仍然可以正常工作。

CP系统,放弃可用性,也就是一段时间内无响应,比如zookeeper。

  1. tcp:三次握手、四次挥手;ack
  2. udp
  3. netty:拆包粘包channel;pipeline;bossThreads;workerThreads

线性表;树;图;排序;查找

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/272083.html