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.消息堆积问题解决办法

转载于:https://www.cnblogs.com/dj66194/p/7659799.html

高级java面试宝典相关推荐

  1. Java面试宝典(2018版)

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

  2. java面试宝典备份

    转自:  https://blog.csdn.net/HuaZi_Myth/article/details/93894334 java面试宝典备份 1.[ meta标签的作用是什么](http://w ...

  3. java面试宝典2019(总结)

    推荐面试视频教程 2019最全BATJ面试免费视频教程 java面试宝典2019 1. meta标签的作用是什么 2. ReenTrantLock可重入锁(和synchronized的区别)总结 3. ...

  4. java面试宝典(自己先留着)

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

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

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

  6. 【2022最新Java面试宝典】—— Redis面试题(70道含答案)

    目录 一.概述 1. 什么是Redis? 2. Redis有哪些优缺点? 3. 使用redis有哪些好处? 4. 为什么要用 Redis / 为什么要用缓存 5. 为什么要用 Redis 而不用 ma ...

  7. 【2022最新Java面试宝典】—— Spring面试题(75道含答案)

    目录 1. Spring概述 1.1 什么是spring? 1.2 Spring的俩大核心概念 1.3 Spring框架的设计目标,设计理念,和核心是什么 1.4 Spring的优缺点是什么? 1.5 ...

  8. java如何创造一个整数的类_【技术干货】Java 面试宝典:Java 基础部分(1)

    原标题:[技术干货]Java 面试宝典:Java 基础部分(1) Java基础部分: 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的 ...

  9. Java面试宝典系列之基础面试题String、变量、类与对象、集合类、SSH(三)

    Java面试宝典之数据结构基础 -- 线性表篇 作者:egg 邮箱:xtfggef@gmail.com 微博:http://weibo.com/xtfggef 博客:http://blog.csdn. ...

  10. Java面试宝典之开源框架!

    Java人才需求怎么样?Java开源框架面试有哪些?Java开发已然成为很多程序员都追求的编程语言,目前Java开发人才的需求非常大,待遇也是相当不错.无论是因为兴趣还是因为就业,学习Java编程都是 ...

最新文章

  1. 如何得到iterator的当前元素_Java中迭代器Iterator详解
  2. 【原创】【专栏】《Linux设备驱动程序》--- LDD3源码目录结构和源码分析经典链接
  3. JavaEE基础(八)
  4. java网格画线_java 网格输出的类--练习 stream
  5. android sd卡不可写,Android检查SD卡是否可读写
  6. This application requires Java Runtime Environment
  7. 2. APIS官网剖析(博主推荐)
  8. HDU 5157(回文树)
  9. 【数字信号调制】基于matlab GUI QPSK调制+解调【含Matlab源码 646期】
  10. 均方根误差RMSE 均方根值(RMS)+ 均方根误差(RMSE)+标准差(Standard Deviation)
  11. Libpng源码的使用
  12. 【求职】江苏省 2020 年大学生核心就业能力培训笔记
  13. 玩游戏电脑IP被封了,怎么修改电脑IP
  14. GCSE英语语言考试-语言和结构
  15. Windows10 重装系统小白教程
  16. android 闪光灯程序,如何在Android中以编程方式打开前闪光灯?
  17. 小米手机与计算机如何连接网络连接,小米手机怎么通过电脑上网如何将手机与电脑相连...
  18. 键指如飞--Mac电脑快捷键学习
  19. 2022年建筑装饰行业报告:企业微网蓄势待发,万亿赛道谁主沉浮?
  20. (改进GM(1,1)模型)灰色残差马尔科夫预测模型的matlab实现

热门文章

  1. Spring实现Controller中方法参数校验
  2. Android开发之获取手机通讯录
  3. 高可用分布式非关系型数据库-Cassandra
  4. AppBox v6.0中实现子页面和父页面的复杂交互
  5. Docker container 集装箱说明
  6. 防止页面高度不足,引起的底部上浮问题
  7. 控制反转与依赖注入概述——Spring IOC/DI(一)
  8. Python的输出、判断、循环函数:Luogu1014Cantor表
  9. js函数内部定义函数的理解
  10. vue的零碎知识点-黑马后台项目整理