想换个对技术要求比较高的岗位和有发展的工作环境,当然,得到一个与技能相匹配的薪资也是一个很重要的原因
面试了8家公司,就总结一下
面试中重要的几个方面:
1、技能。作为技术人员,这个是干活的家伙什
2、沟通。见啥人说啥话,不同的面试人员,要从不同的抽象层面进行沟通
高级技能:分布式、缓存(一级缓存、二级缓存)、消息中间件(性能、事务、积压时的解决办法)、数据库的分库分表,主从数据库、集群
高并发、高性能(并发是两个任务共享时间段,分时系统在一个cpu上跑就是并发;并行是两个任务在同一时间发生,即在不同的cpu核心上同时运行)
行业背景:互联网。现在硬件成本降低,手机、平板都可以进行满足日常生活的所有消费,即这是一个新的消费通道。
网站或app,直接面向消费者,这样就产生对高并发、高性能的需求
技术篇:
作为java作为主技术能的dev,
jvm:jvm结构、哪些对象需要回收、如何回收、什么时候回收
多线程:线程的状态转换图、如何启动线程、线程池(如何用、内部如何实现--任务一项技术都不是万能药,只有在合适的地方使用,才能没有意外发生)、线程之间如何通信(多个线程都能操作的东西,都可以作为媒介)
锁:
java中的锁:既然有多线程,在共享数据时,肯定要有个协调机制,不然结果就是不可控的。技术是为业务服务的,业务规则都是确定的,一定要有顺序。这个顺序在java中就是使用锁来协调的。
java中的锁:
synchronized,ReentrantLock,ReentrantReadWriteLock。如果没有wait的场景,能用synchronize就用。
如果需要wait或需要对同步可控,则可以使用ReentrantLock;
如果读多写少的场景,就使用ReentrantReadWriteLock
还有一种场景就是一个任务中间有些部分可以用多线程解决,只有多个线程都结束,才能进行下一步,这种情况使用invokeAll、CountDownLatch 、CyclicBarrier
IO:InputStreamReader,OutputStreamWriter,可以设置编码
消息中间件:各个消息中间件的比较,p2p,jms Publish/Subscribe。消息中间件嘛,数据丢失了怎么处理
分布式
nginx--tomcat,这是对请求的分发
ehcacher、redis缓存的处理,数据库就不单独写了,整体和Cahce写到一块吧。读数据时,Business不用考虑是从缓存中获取,还是从数据库中获取
Map中get和put的逻辑
数据库优化的途径
Spring bean scope,aop,mvc,transaction,
排序、查找算法
最后就是沟通了,和管理干部或HR沟通,与技术人员沟通的方式是不同的。
沟通时,讲些对方世界里的内容,是沟通的前提
谈薪资,说个高价,再讨价还价也可以。坚持自己的期望也可以。
找工作这个事,和找女朋友差不多,双方谈妥了,什么都好说;
如果差点啥,就是降低标准,也不一定能勾搭在一块
一专多长。一定要有一个能拿得出手的
Best wishes!