1.http : HTTP协议是建立在TCP协议上的应用层协议,协议的本质是请求----应答:
即对于HTTP协议来说,服务端给一次响应后整个请求就结束了,这是HTTP请求最大的特点,也是由于这个特点,HTTP请求无法做到的是服务端向客户端主动推送数据。
轮询是最普遍的基于HTTP协议获取实时数据的方式,轮询又分为短轮询和长轮询
短轮询: 客户端向服务端请求数据,服务端立即将数据返回给客户端,客户端没有拿到想要的数据(比如返回结果告诉客户端,数据处理中),客户端继续发请求,服务端继续立即响应,周而复始。( 数据变化比较频繁或者能预期到数据在短时间内会发生一次变化的场景可以使用短轮询)
长轮询: ,差别在于服务端收到请求不再直接给响应,而是将请求挂起,自己去定时判断数据的变化,有变化就立马返回给客户端,没有就等到超时为止。
websocket: 客户端和服务端之间有一条通路,当服务端数据有变化的时候,服务端可以主动推送到客户端
2,基本功
- 工作相关使用到的JDK类及其相关源码、机制
- 设计模式,设计模式在工作中用到了哪些,具体使用场景
- 并发类的相关知识,线程安全、锁机制、信号量、闭锁、栅栏、线程池等
- 框架相关,Spring相关机制、Spring MVC相关机制、MyBatis相关机制、使用的细节点、框架实现原理等
- JVM,内存布局、垃圾识别算法、垃圾回收算法、垃圾收集器、类加载机制、内存模型、出现内存问题时定位问题的方法等
- 数据库的基本数据类型、索引机制、各引擎区别、锁机制、慢SQL定位及优化等
- 缓存机制,这里的机制指的是缓存加载、缓存击穿、缓存雪崩这些机制及其相关应对方案,用过Redis、MemCache的最好理解一下它们的原理或者缓存提供的一些高级功能,集群如何实现
- 分布式的一些知识,比如CAP理论、数据一致性的几种解决方案、分布式事务如何处理、分库分表怎么做、现有的相关解决方案等
- NIO的作用,epoll模型是否知道一些,Netty的相关机制、Netty相比原生NIO的优点、半包拆包、断线重连解决方案等
- Web相关,Get与Post的区别、转发与重定向的区别、跨域问题如何解决、如何保证接口幂等性等
- 网络层相关,三次握手和四次握手、全连接队列和半连接队列、负载均衡算法等
- 其他中间件,MQ作用和使用场景、服务化治理框架的作用和使用场景、配置中心的作用和使用场景等
- 数据结构,数组、链表、栈、队列、树等优缺点,在什么场景下使用什么数据结构
- Linux相关知识,基本命令的使用,排查日志、定位问题,项目或者第三方组件的基本运维等
3.项目经验
- 独立完成复杂业务,或者完成一个已有项目中的大功能点,这就需要有根据业务对功能进行分解、分析的能力
- 独立排查复杂问题,在项目运行过程中,一定不可能安然无事,除开业务性的问题,CPU 100%是否能独立排查、内存溢出是否能独立排查、应用死锁或者DB死锁能否独立排查、API调用时间长能否独立排查,以上问题排查完毕能否及时解决
- 带领团队的能力,可能这时候带领的是1~2个人的小团队,即使一个小团队,也能考验带团队、任务合理分配的能力
4,。定时任务
ScheduledExecutorService executor = Executors.newScheduledThreadPool( 10 );
executor.schedule(new Runnable() {
public void run() {
System.out.println("Work start, thread id:" + Thread.currentThread().getId() );
}
}, 0 , TimeUnit.SECONDS);
executor.schedule(new Runnable() {
public void run() {
System.out.println("Work start, thread id:" + Thread.currentThread().getId() );
}
}, 9 , TimeUnit.SECONDS);
5.Bigdecimal 使用基本规则
BigDecimal bd1 = new BigDecimal("0.09");
BigDecimal bd2 = new BigDecimal("0.01");
System.out.println("add:" + bd1.add(bd2));
System.out.println("----------------------");
// public BigDecimal subtract(BigDecimal subtrahend):减
BigDecimal bd3 = new BigDecimal("1.0");
BigDecimal bd4 = new BigDecimal("0.32");
System.out.println("subtract:" + bd3.subtract(bd4));
System.out.println("----------------------");
// public BigDecimal multiply(BigDecimal multiplicand):乘
BigDecimal bd5 = new BigDecimal("1.015");
BigDecimal bd6 = new BigDecimal("100");
System.out.println("multiply:" + bd5.multiply(bd6));
System.out.println("----------------------");
// public BigDecimal divide(BigDecimal divisor):除
BigDecimal bd7 = new BigDecimal("1.301");
BigDecimal bd8 = new BigDecimal("100");
System.out.println("divide:" + bd7.divide(bd8));
System.out.println("divide:" + bd7.divide(bd8,3,BigDecimal.ROUND_HALF_UP));
System.out.println("divide:" + bd7.divide(bd8,9,BigDecimal.ROUND_HALF_UP));
6.Mybatis 使用
.mybatis中插入list
BEGIN
<foreach collection="list" item="view" separator=";">
insert into t_visa_interview(id, name, id_card, tel_phone, lease_code, room_num, create_time)
values
(T_VISA_INTERVIEW_SEQ.NEXTVAL, #{view.viewName,jdbcType=VARCHAR}, #{view.viewIdCard,jdbcType=VARCHAR},
#{view.viewTelPhone,jdbcType=VARCHAR}, #{view.leaseCode,jdbcType=VARCHAR},#{view.roomNum,jdbcType=DECIMAL},
sysdate)
</foreach>
;END;
删除表中重复元素
select * from check_data where phone in (select phone from check_data group by phone having count(phone) > 1)
delete from check_data
where phone in (select phone from check_data group by phone having count(phone) > 1)
and rowid not in (select min(rowid) from check_data group by phone having count(phone )>1)
,更新一个表中字段成另一个表的数据
update check_data t set t.idcardno =(select REPLACE(t2.temp2,'''','') from temp_data t2 where t2.temp1=t.phone) where t.phone=t2.temp1
id < 50 ======= id< 50