java面试

Wesley13
• 阅读 620

自己因为面试碰壁,决定继续学习半个月再找工作

本文就用来记录自己学习的过程吧

资料: [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原理

设计模式

程序之间的低耦合和高聚合

网络协议

资料:

TCP/IP、HTTP、HTTPS、HTTP2.0

TCP协议的三次握手/四次挥手

三次握手:

喂你能听到吗?

我能听到,你能听到吗?

我也能听到!

三次即可确认连接

四次挥手:

C:我关了

S:关吧

S:我也关了

C:关吧

为什么建立连接是三次,断开连接是四次?

  这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

 HTTPS 连接

java面试

分布式事务

 1. 两阶段提交 :事务处理者分别执行,但不提交, 由协调者 汇总执行结果,然后通知各方,同时提交或同时回滚

缺点:处理过程中,各方会一直锁定资源, 资源占用太高.

2. 补偿性事务: 各处理各的, 如果其中一个失败,则将成功的部分,执行反操作,补偿事务

3. 最终一致性: 基于可靠的消息服务,先处理先行事务,然后将后续事务放入消息队列, 只需要保证最终消息队列中的任务执行成功,即最终一致性

4. 阿里GTS 全局事务服务:需要使用阿里数据库,非开源

大数据相关:

资料:

绝对干货,教你四分钟插入1000万条数据到mysql数据库表

10万,提交一次。  然后将max_allowed_packet参数设置更大一些 入100m

Dubbo、ZooKeeper

资料:

5分钟让你了解ZooKeeper的功能和原理

ZooKeeper学习总结 第一篇:ZooKeeper快速入门

Dubbo实战入门,良心详解制作

光看看不懂, 周末回家自己搭了再回来补

Hash算法

HASH 即散列散发,  通过压缩文件,将任意长度的内容,压缩为固定长度的摘要,通过对比摘要来对比文件是否相同

资料: Hash算法总结

大数据处理

资料:面试题---大数据处理

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这