自己因为面试碰壁,决定继续学习半个月再找工作
本文就用来记录自己学习的过程吧
资料: [java面经]干货整理,Java面试题
线程死锁:多个线程,互相等待对方释放对象锁
解决办法:等待锁顺序一致
并发和同步的问题: 锁机制
资料:Java高并发、如何解决
java代码层面的对象锁、数据库层面的数据锁
悲观锁:锁定修改的数据 例如 oracle的 for update;
乐观锁:optimistic-lock:version 对数据库记录,增加版本控制,提交版本必须大于记 录当前版本才能执行更新
最后复制一些在高并发下面需要常常需要处理的内容:
尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能。
用jprofiler等工具找出性能瓶颈,减少额外的开销。
优化数据库查询语句,减少直接使用hibernate等工具的直接生成语句(仅耗时较长的查询做优化)。
优化数据库结构,多做索引,提高查询效率。
统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行统计的功能。
能使用静态页面的地方尽量使用,减少容器的解析(尽量将动态内容生成静态html来显示)。
解决以上问题后,使用服务器集群来解决单台的瓶颈问题。
高并发的解决方法有俩种:
一种是使用缓存、另一种是使用生成静态页面;还有就是从最基础的地方优化我们写代码减少不必要的资源浪费:(
1.不要频繁的new对象,对于在整个应用中只需要存在一个实例的类使用单例模式.对于String的连接操作,使用StringBuffer或者StringBuilder.对于utility类型的类通过静态方法来访问。
2. 避免使用错误的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做条件判断,尽量使用比的条件判断方式.使用JAVA中效率高的类,比如ArrayList比Vector性能好。)
垃圾回收算法:垃圾收集算法-Generational Collection
ClassLoader:深度解析Java的ClassLoader机制
Forward和Redirect的区别::间接请求转发-重定向(Redirect) :直接请求转发(Forward)
数据库相关
隔离级别 可脏读、不可脏读不可重复读、可重复读可幻读、不可幻读
传播行为:
1. 有当前事务就加入,没有就新建
2. 有当前事务就加入,没有就抛异常
3. 无论有没有都新建
4. 有事务就加入,没有就以非事务执行
5.非事务执行,有事务挂起当前事务
6. 非事务执行,有事务抛出异常
7. 有事务就嵌套事务执行,没有事务就创建新事务
MYSQL 存储引擎:
1. MyISAM存储引擎:不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表
2. InnoDB存储引擎* 该存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM引擎,写的处理效率会差一些,并且会占用更多的磁盘空间以保留数据和索引。 InnoDB存储引擎的特点:支持自动增长列,支持外键约束
3. MEMORY存储引擎 存在内存中,支持BTREE索引或者HASH索引
4. Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。
MYSQL 主从读写分离:
master:负责增删改-事务性查询
salve:负责select查询 由于只需要负责查询,可以使用MyISAM存储引擎提高查询性能
1、主从只负责各自的读和写,极大程度缓解X锁和S锁争用。
2、slave可以配置MyISAM引擎,提升查询性能以及节约系统开销。
3、master直接写是并发的,slave通过主库发送来的binlog恢复数据是异步的。
4、slave可以单独设置一些参数来提升其读的性能。
5、增加冗余,提高可用性。 实现主从分离可以使用MySQL中间件如:Atlas
分库分表:
水平拆分-分表
垂直拆分-分库
索引:索引以及索引的实现
B+/-Tree :B+/-Tree原理
设计模式
网络协议
资料:
三次握手:
喂你能听到吗?
我能听到,你能听到吗?
我也能听到!
三次即可确认连接
四次挥手:
C:我关了
S:关吧
S:我也关了
C:关吧
为什么建立连接是三次,断开连接是四次?
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。
HTTPS 连接
分布式事务
1. 两阶段提交 :事务处理者分别执行,但不提交, 由协调者 汇总执行结果,然后通知各方,同时提交或同时回滚
缺点:处理过程中,各方会一直锁定资源, 资源占用太高.
2. 补偿性事务: 各处理各的, 如果其中一个失败,则将成功的部分,执行反操作,补偿事务
3. 最终一致性: 基于可靠的消息服务,先处理先行事务,然后将后续事务放入消息队列, 只需要保证最终消息队列中的任务执行成功,即最终一致性
4. 阿里GTS 全局事务服务:需要使用阿里数据库,非开源
大数据相关:
资料:
绝对干货,教你四分钟插入1000万条数据到mysql数据库表
10万,提交一次。 然后将max_allowed_packet参数设置更大一些 入100m
Dubbo、ZooKeeper
资料:
ZooKeeper学习总结 第一篇:ZooKeeper快速入门
光看看不懂, 周末回家自己搭了再回来补
Hash算法
HASH 即散列散发, 通过压缩文件,将任意长度的内容,压缩为固定长度的摘要,通过对比摘要来对比文件是否相同
资料: Hash算法总结
大数据处理
资料:面试题---大数据处理