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面试宝典的更多相关文章

  1. Java面试宝典(2018版)

    置顶 2018年11月10日 23:49:18 我要取一个响亮的昵称 阅读数:8893    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chen ...

  2. java面试宝典2019(好东西先留着)

    java面试宝典2019 1.meta标签的作用是什么 2.ReenTrantLock可重入锁(和synchronized的区别)总结 3.Spring中的自动装配有哪些限制? 4.什么是可变参数? ...

  3. java面试宝典(蓝桥学院)

    Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围 ...

  4. Java面试宝典

    相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消 ...

  5. Java 面试宝典-2017

    http://www.cnblogs.com/nelson-hu/p/7190163.html Java面试宝典-2017   Java面试宝典2017版 一. Java基础部分........... ...

  6. Java面试宝典-2017

    Java面试宝典2017版 一. Java基础部分........................................................................... ...

  7. Java面试宝典2018

    转 Java面试宝典2018 一. Java基础部分…………………………………………………………………………………….. 7 1.一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制 ...

  8. 互联网高级Java面试总结

    前不久刚换了单位,这段时间抽出时间来总结一下. 本人渣本毕业四年,无大厂工作经验,出来面高级Java. 上家单位是一个知名互联网平台,但是体量不大的小公司(5线互联网公司),但就是出名(职场人都知道~ ...

  9. 带你全面了解高级 Java 面试中需要掌握的 JVM 知识点

    目录 JVM 内存划分与内存溢出异常 垃圾回收算法与收集器 虚拟机中的类加载机制 Java 内存模型与线程 虚拟机性能监控与故障处理工具 参考 带你全面了解高级 Java 面试中需要掌握的 JVM 知 ...

随机推荐

  1. Ubuntu系统---“NVIDIA 驱动+CUDA+cuDNN ”之后 OpenCV安装

    Ubuntu系统---“NVIDIA 驱动+CUDA+cuDNN ”之后 OpenCV安装 目录: 一.OpenCV安装包下载 二.cmake安装 三.OpenCV安装 正文 一.OpenCV安装包下 ...

  2. nagios安装部署及详细配置说明(转)

    一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...

  3. [ 转载 ]hashCode及HashMap中的hash()函数

    hashCode及HashMap中的hash()函数   一.hashcode是什么 要理解hashcode首先要理解hash表这个概念 1. 哈希表 hash表也称散列表(Hash table),是 ...

  4. mysql查询表中最后一条记录

    查询全部的记录:            select * from test_limit ; 查第一条记录:             select * from test_limit limit 1; ...

  5. Redis做消息队列

    1.连接从Redis中获取日志文件并存储到ES中 [root@Logstash ~]# vim /usr/local/logstash/config/redis.conf input {     be ...

  6. Windows服务启动时候报错1053

    用.net 开发了一个C#语言的windows服务,在本地和测试环境,安装启动都正常,在新的线上环境报错,不能启动-报出-错误1053:服务没有及时响应启动或控制请求. 后来发现时线上.NET FRA ...

  7. 更改ejs模板引擎的后缀为html

    安装 EJS 在项目目录右键->Open Command Prompt Here 输入 npm install ejs 打开app.js //app.set('view engine', 'ja ...

  8. stl常数测试

    如图: 数组的常数约为9.

  9. Vue 组件中锚点定位的问题

    1 当前组件的顶部 this.$el.scrollIntoView() 2 指定的 Element this.$el.querySelector(selector).scrollIntoView() ...

  10. SP1716 GSS3(线段树+矩阵乘法)

    Code: #include <bits/stdc++.h> #define N 50001 #define ll long long #define lson now<<1 ...