- 四种线程池
Java通过Executors提供四种线程池,分别为:
1,newCachedThreadPool
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
2,newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
3,newScheduledThreadPool
创建一个定长线程池,支持定时及周期性任务执行。
4,newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。 - 复合索引
索引可以覆盖多个数据列,如像INDEX(columnA,columnB)索引。这种索引的特点是MySQL可以有选择地使用一个这样的索引。如果查询操作只需要用到columnA数据列上的一个索引,就可以使用复合索引INDEX(columnA,columnB)。不过,这种用法仅适用于在复合索引中排列在前的数据列组合。比如说,INDEX(A,B,C)可以当做A或(A,B)的索引来使用,但不能当做B、C或(B,C)的索引来使用。
- session共享问题:
解决方案一:基于Nginx的ip_hash 负载均衡
解决方案二:基于Tomcat的session复制
解决方案三:使用Redis做缓存session的统一缓存
解决方案四:其实还可以把session放到cookie中去,因为每次用户请求的时候,都会把自己的cookie放到请求中,所以这样就能保证每次用户请求的时候都能保证用户在分布式环境下,也不会在进行二次登陆。 - 如何解决websocket长链接断了的问题
定期发送心跳检测 - foreachPartition和mapPartitions的区别
foreachPartition应该属于action运算操作,而mapPartitions是在Transformation中,所以是转化操作,此外在应用场景上区别是mapPartitions可以获取返回值,继续在返回RDD上做其他的操作,而foreachPartition因为没有返回值并且是action操作,所以使用它一般都是在程序末尾比如说要落地数据到存储系统中如mysql,es,或者hbase中,可以用它。当然在Transformation中也可以落地数据,但是它必须依赖action操作来触发它,因为Transformation操作是延迟执行的,如果没有任何action方法来触发,那么Transformation操作是不会被执行的,这一点需要注意。 - springcloud http协议,dubbro rpc协议
- 快速排序 基于“二分”思想,递归,以此确定每个元素所在的位置
- http的三个问题:
(1)为一个web客户端潜在的建产多个tcp连接。
(2)有一个大的http头,以满足http协议。
(3)客户端的脚本必须为输入连接和输出连接建立一个映射,以确定回复。
(4)基于请求-响应模式,http服务端不能主动推送(push)数据到客户端。
websocket的三个好处:
(1)一个web客户端只有一个tcp连接。
(2)websocket服务端可以推送数据到web客户端.
(3)轻量级的头,减少数据传送量
(4)服务端可以主动推送数据到客户端
使用websocket节省资源,避免重复的创建连接 - 1.synchronized 在方法上,所有这个类的加了 synchronized 的方法,在执行时,会获得一个该类的唯一的同步锁,当这个锁被占用时,其他的加了 synchronized 的方法就必须等待
2.加在对象上的话,就是以这个对象为锁,其他也以这个对象为锁的代码段,在这个锁被占用时,就必须等待
3.synchronized作用于一个类T时,是给这个类T加锁,T的所有对象用的是同一把锁。 - sparkstreaming底层是什么Dstream(离散的数据流)