高级java面试宝典
1.spring事物的配置
spring事物分为俩种,一种是注解事物,一种是AOP事物
注解事物的配置: 事物的隔离级别,事物的传播性,事物的超时回滚,哪些异常回滚,哪些不回滚,有默认的回滚规则
注解事物的启动不是由@Transactional该注解启动的,而是由<tx:annotation-driven/>元素的出现 开启 了事务行为。
AOP事物的配置:在xml中配置,配置某些方法的隔离性,传播性,回滚等.需要声明切面表达式来声明在那些包下启动事物.
2.事物
事物的四大特性
1.原子性,2.一致性,3.隔离性.4.持久性.
事物的隔离级别
1.读未提交
2.读已提交
3.可重复读
4.序列化
大多数的数据库系统的默认事务隔离级别都是:Read committed (读已提交)
而MySQL的默认事务隔离级别是:Repeatable Read (可重复读)
3.垃圾回收机制
年轻代(Young Generation)
1.新生成的对象首先都放到年轻代,年轻代的目标就是尽可能快的回收那么声明周期短的对象.
2.新生代按照8:1:1的内存比例将内存划分为三个不同区域,一个eden区和俩个幸存者区域,一般对象都在eden区域生成,
回收时先将eden区域存活的对象放到幸存者区,如此反复,当eden区和幸存者区域都放满是,将eden和幸存者存活的对象放到幸存者1区,然后清空eden和幸存者一区,然后将幸存者1区和幸存者区交换,保证幸存者1区为空,如此反复!
3.当幸存者1区不足已存放eden和幸存者区的对象是,将直接将存活对象放到年老区.若是老年代也满了就会触发一次Full GC,也就是新生代、老年代都进行回收.
4.新生代发生的GC也叫做Minor GC,MinorGC发生频率比较高(不一定等Eden区满了才触发).
年老代(Old Generation)
1.在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。
2.内存比新生代也大很多(大概比例是1:2),当老年代内存满时触发Major GC即Full GC,Full GC发生频率比较低,老年代对象存活时间比较长,存活率标记高。
持久代(Permanent Generation)
用于存放静态文件,如Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate 等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。
4.HashMap
HashMap是由数组和链表组合而成.
HashMap是在bucket中储存键对象和值对象,作为Map.Entry。
HashMap将键值对存储在静态内部类Entry中,Entry中定义了Key和Value.
正常情况下讲该数据存储在bucket(Entry)数组中.
当HashCode值相同时,将不同键值对存放在链表中.
取值的时候,通过先调用HashCode方法获取bucket位置,然后再通过key.equals()方法获取链表中正确的节点.
简单来说,HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度依然为O(1),因为最新的Entry会插入链表头部,急需要简单改变引用链即可,而对于查找操作来讲,此时就需要遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。
5.同步关键字加在静态方法和非静态方法的区别
同步分为俩种: 同步方法,同步代码块,各有利弊
同步方法也分为两种: 静态同步方法和非静态同步方法
所有的非静态同步方法用的都是同一把锁——实例对象本身
而所有的静态同步方法用的也是同一把锁——类对象本身
非静态方法同步是对类的实例对象进行加锁,也就是说,当实例对象对该类的非静态方法进行加锁是,该实例对象的其他非静态方法必须等待该非静态方法释放锁,才可以获取锁. 而不会影响其他实例对象的操作.
静态方法同步是对类对象本身进行加锁,首先,静态方法同步和非静态方法同步是不存在竞争关系的,因为他们锁的对象不同. 其次,静态方法获取锁时,该类的其他静态方法必须等待该方法释放锁才可以获取锁.
而不管是同一个实例对象的静态同步方法之间,还是不同的实例对象的静态同步方法之间,只要它们同一个类的实例对象!
6.数据库索引
数据库建立索引的原则:
1.在经常当条件查询的字段上加索引
2.在经常分组和排序的字段上加索引.
3.组合索引是指特定条件的组合一起使用的时候,索引才会生效
索引失效:
1.like%号在前
2.<> , is null, is not null,都会引起索引失效
7.MyIsam 和 InnoDB的区别
前者不支持事物,外键,以及行级锁等数据库高级功能
InnoDB 直接 事物,外键,行级锁, Myisam效率比较高
8.ConcurrentHashMap原理
一个ConcurrentHashMap由多个segment(段)组成,每一个segment都包含了一个HashEntry数组的hashtable, 每一个segment包含了对自己的hashtable的操作,比如get,put,replace等操作,这些操作发生的时候,对自己的hashtable进行锁定。由于每一个segment写操作只锁定自己的hashtable,所以可能存在多个线程同时写的情况,性能无疑好于只有一个hashtable锁定的情况
9.常见的提高高并发下访问的效率的手段
像第一种情况可以增加网络带宽,DNS域名解析分发多台服务器。
负载均衡,前置代理服务器nginx、apache等等
数据库查询优化,读写分离,分表等等
10.JVM
堆,(存放对象实例)栈(局部变量,),方法区(常量,静态属性)
jvm调优,有具体的工具可以 查看堆信息,对堆内存中的空间大小分配进行监控, 垃圾监控(长时间监控回收情况)查看堆内类、对象信息查看:数量、类型等
线程监控,
线程信息监控:系统线程数量。
线程状态监控:各个线程都处在什么样的状态下
内存泄漏检查
11.redis集群
数据结构, String,List,set,hash
官方推荐奖节点设置成主从结构,也就是一个主节点,多个从节点,如果一个主节点挂掉的话,会根据选举算法在从节点中升一个为主节点.继续提供服务.
Redis Cluster 官方给出的集群方案
Redis Sharding集群 分片的集群方案, Jedis集成
利用代理中间件实现大规模Redis集群 (twemproxy) 代理中间件
走中间件再到redis
12.dubbo
1、服务注册中心
2、集群容错
3、直连提供者
4、负载均衡
5、服务版本,服务分组
6、多协议
13.ES (实时分析的分布式搜索引擎)。
Es 是分布式的,不需要任何组件,其次ES是实时建立索引的,而Solr的实时性比较差,会遇到io阻塞的问题.而ES不会有.
可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。
优点
Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。
Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。
处理多租户(multitenancy)不需要特殊配置,而Solr则需要更多的高级设置。
Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。
各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。
Elasticsearch与Solr的比较*
当单纯的对已有数据进行搜索时,Solr更快。
当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。
随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。
Elasticsearch 与 Solr 的比较总结
二者安装都很简单;
Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。
14.MQ
RocketMQ:
可集群
1.单机支持1W以上的持久化队列
2.刷盘策略
异步刷盘,rocketmq中的所有消息都是持久化的,先写入系统pagecache,然后刷盘,可以保证内存与磁盘都有一份数据,访问时,可以直接从内存读取
3.消息查询
4.服务器消息过滤
5.消息堆积问题解决办法
高级java面试宝典的更多相关文章
- Java面试宝典(2018版)
置顶 2018年11月10日 23:49:18 我要取一个响亮的昵称 阅读数:8893 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chen ...
- java面试宝典2019(好东西先留着)
java面试宝典2019 1.meta标签的作用是什么 2.ReenTrantLock可重入锁(和synchronized的区别)总结 3.Spring中的自动装配有哪些限制? 4.什么是可变参数? ...
- java面试宝典(蓝桥学院)
Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围 ...
- Java面试宝典
相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消 ...
- Java 面试宝典-2017
http://www.cnblogs.com/nelson-hu/p/7190163.html Java面试宝典-2017 Java面试宝典2017版 一. Java基础部分........... ...
- Java面试宝典-2017
Java面试宝典2017版 一. Java基础部分........................................................................... ...
- Java面试宝典2018
转 Java面试宝典2018 一. Java基础部分…………………………………………………………………………………….. 7 1.一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制 ...
- 互联网高级Java面试总结
前不久刚换了单位,这段时间抽出时间来总结一下. 本人渣本毕业四年,无大厂工作经验,出来面高级Java. 上家单位是一个知名互联网平台,但是体量不大的小公司(5线互联网公司),但就是出名(职场人都知道~ ...
- 带你全面了解高级 Java 面试中需要掌握的 JVM 知识点
目录 JVM 内存划分与内存溢出异常 垃圾回收算法与收集器 虚拟机中的类加载机制 Java 内存模型与线程 虚拟机性能监控与故障处理工具 参考 带你全面了解高级 Java 面试中需要掌握的 JVM 知 ...
随机推荐
- Linux学习之七-配置Telnet连接Linux服务器
配置Telnet连接Linux服务器 通过telnet可以从windows平台访问linux 服务器 ,实现和ssh 客户端一样的效果,区别在于通过ssh连接更安全. 检查Linux系统中是否安装了t ...
- idou老师教你学Istio 08: 调用链埋点是否真的“零修改”?
本文将结合一个具体例子中的细节详细描述Istio调用链的原理和使用方式.并基于Istio中埋点的原理解释来说明:为了输出一个质量良好的调用链,业务程序需根据自身特点做适当的修改,即并非官方一直在说的完 ...
- jquery进行each遍历时,根据条件取消某项操作
示例代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- ThreadLocal 是什么?(未完成)有哪些使用场景?(未完成)
ThreadLocal 是什么?(未完成)有哪些使用场景?(未完成)
- Java8-Executors-No.03
import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; import java.ut ...
- Tarjan算法【阅读笔记】
应用:线性时间内求出无向图的割点与桥,双连通分量.有向图的强连通分量,必经点和必经边. 主要是求两个东西,dfn和low 时间戳dfn:就是dfs序,也就是每个节点在dfs遍历的过程中第一次被访问的时 ...
- SIGAI深度学习第五集 自动编码器
深度学习模型-自动编码器(AE),就是一个神经网络的映射函数,f(x)——>y,把输入的一个原始信号,如图像.声音转换为特征. 大纲: 自动编码器的基本思想 网络结构 损失函数与训练算法 实际使 ...
- Oracle shell监控小脚本
cat dba_cpu_monitor.sh ##CPU Monitorh=`hostname`cpu_used=`top -b -d 1 -n 2 | grep Cpu | awk 'NR> ...
- 解决zabbix的cannot allocate shared memory of size错误
问题状态:zabbix_server 不能启动,系统CentOS 6.7 原因分析:这是因为内核对share memory的限制造成的. 用到如下命令ipcs [-m|l|a],sysctl [-a| ...
- Devexpress GridControl中 repositoryItemCheckEdit作为选择列以及作为显示列的使用方法
一.在gridcontrol列表控件中使用单选框作为选择列,这里有两种方式. 方式一:选择gridcontrol控件的Run Designer按钮,添加一列,设置该列的ColumnEdit为check ...