高级工程师面试题

一、三大框架方面问题


1、Spring 事务的四种隔离性,并说说每个隔离性的区别

Read uncommitted(未授权读取、读未提交):

如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。

避免了更新丢失,却可能出现脏读。也就是说事务B读取到了事务A未提交的数据。这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据,这种隔离级别会产生脏读,不可重复读和幻像读

Read committed(授权读取、读提交):

读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。该隔离级别避免了脏读,但是却可能出现不可重复读。事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。

保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据  

Repeatable read(可重复读取)

读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。避免了不可重复读取和脏读,但是有时可能出现幻读。这可以通过“共享读锁”和“排他写锁”实现。

幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,
                这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表
                中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,
                就好象发生了幻觉一样

Serializable(序列化)

提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。

序列化是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。


2、Spring事务的传播行为,并说说每个传播行为的区别


1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启  
2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行  
3. PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。  
4. PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。  
5. PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。  
6. PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常  
7. PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务,    则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行 

3、Struts跟Spring mvc的优缺点,让你选会如何选

解答: Spring MVC 与 Struts的区别

4、简单说说Spring 事务机制

解答: Spring事务机制

5、Spring 4.0新特性

解答: Spring4新特性


二、负载均衡、集群相关


1、Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享 

解答: 配置参考

2、nginx配置文件详解——nginx.conf

解答: Nginx配置文件详细说明



三、项目优化相关


1、单例模式有几种? 如何优化?

解答: 单例模式的7中用法

2、简单说说线程池的原理和实现

解答: 线程原理及实现

四、并发和安全方面


1、平台上的图片如何防盗链

解答: http下载防盗链原理:http协议的字段referer记录来实现


2、消息队列的原理和实现

解答: 1、消息队列原理      2、 深入浅出 消息队列 ActiveMQ

五、数据库方面


1、mysql查询字段区不区分大小写?
解答:不区分,值也不区分

 MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

      1、数据库名与表名是严格区分大小写的;

      2、表的别名是严格区分大小写的;

      3、列名与列的别名在所有的情况下均是忽略大小写的;

      4、变量名也是严格区分大小写的


2、简单说说数据库集群和负载均衡、分布式

解答:数据库负载均衡和集群参考 ,参考2


3、存储过程的结构和优点

解答: 大概结构    存储过程的优缺点




五、基础知识

1、HashMap和Hashtable的区别

解答http://blog.csdn.net/u010983881/article/details/49762595
2、抽象类与接口的区别。
 抽象类里面的方法有具体实现内容,而接口只定义了方法没有实现内容。
接口定义的变量都是final的,而abstract类定义的可以不是final的
abstract类可以通过get....()方法实现类的实例,但是接口不可以

3、final关键字的使用和区别
http://www.importnew.com/7553.html

4、异常分类和处理机制。
http://blog.csdn.net/hguisu/article/details/6155636
5、JDK版本区别。
http://blog.itpub.net/29119536/viewspace-1629145/
6、StringBuilder内部实现机制。
https://segmentfault.com/a/1190000004261063
7、反射机制的使用。
http://www.cnblogs.com/chenliang901114/archive/2013/04/23/javalearner.html
8、匿名内部类的使用。
匿名内部类是没有名字的类,只在某一处被使用,不会被多处调用,一般是某个父类或接口的特定实现
9、泛型的概念和使用。
http://www.infoq.com/cn/articles/cf-java-generics

10、弱引用和虚引用的概念和使用方式
  • 强引用: 一般的引用都是强引用,即使OutOfMemory也不会回收这部分被把持的引用内存。

  • 软引用(SoftReference): 如果内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被使用。++软引用可以用来实现内存敏感的高速缓存。++

  • 弱引用(WeakReference):弱引用的对象拥有更短暂的生命周期。当垃圾回收期发现只有若引用的对象,不论内存空间足够与否,都会回收它。

  • 虚引用():虚引用不会决定对象的生命周期,如果一个对象仅持有一个虚引用,那么它随时可能被回收。++虚引用主要用来跟踪对象被垃圾回收器回收的活动。+

11、SpringMVC和Struts2的区别
  • SpringMVC的方法级别的拦截,Struts2是类级别的拦截;

  • SpringMVC是基于Servlet实现Controller,Struts2是基于Filter实现;

  • SpringMVC性能和安全性高于Struts2;

  • SpringMVC更加组件化和流程化,易于扩展,比如返回JSON通过设置@ResponseBody即可;

  • Struts2更加无耦合,比较纯粹,但是需要更多的自行开发的代码以支持更多功能。

12、 Spring IOC和AOP的概念以及实现方式
13、Spring事务的管理
14、GC算法有哪些
15、垃圾回收器有哪些
16、如何调优JVM

六、分布式

zookeeper的用途
dubbo的用途以及优点
dubbo的实现原理

七、数据结构和算法

单向链表的逆序排列
双向链表的操作
1亿个整数的倒序输出
找出给定字符串中最长回文(回文:abcdcba,两端对称)

八、网络编程

Get和Post的区别
Https协议的实现
长连接的管理
Socket的基本方法

九、数据库

inner join和left join的区别

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

复杂SQL语句
数据库优化方式
数据库拆分方式
如何保证不同数据结构的数据一致性

十、安全

什么是XSS攻击,具体如何实现?开放问题:如何保障系统安全?

十一、设计模式

写出一个设计模式的类图
设计模式的意义是什么
写个单例模式的代码

十二、多线程

如何避免Quartz重复启动任务
线程池满了如何处理额外的请求
同一个对象的连个同步方法能否被两个线程同时调用




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值