阿里面试总结

1.如何防止网络抖动产生的重复建单?

答:原因:你这种情况应该是客户端请求发过去了,服务器写到数据库了,返回完成状态的时候网断了,这时客户端没有收到反馈以为订单没有生成,再点击下单,这时网络好了,结果生成了两个。

解决办法:(1).待支付订单如果正在支付,就把这边订单锁定,变更为一个中间状态,这样就不会重复去支付这笔订单了(前端将提交按钮第一次点击提交时变成disable状态,直到后台返回状态后提交按钮恢复状态)

                 (2).可以修改后台代码使用线程池来避免重复提交,用sychronized就会是有重复的数据产生,如果加上则不会产生重复数据,达到预期效果。前台重复提交第二次时,然后通过查询后台返回一个状态,前台提示“不能重复提交”

                  (3).通过查询数据库这条订单的关键字段信息,看是否有重复订单,若有则前台重复提交时返回前台“不可重复提交”


2.如何度过服务器启动后的连接风暴?

http://news.chinabyte.com/395/13547895.shtml

https://blog.csdn.net/gcttong00/article/details/78859653


3.jvm GC原理?

何为GC?
垃圾回收机制是由垃圾收集器Garbage Collection GC来实现的,GC是后台的守护进程。它的特别之处是它是一个低优先级进程,但是可以根据内存的使用情况动态的调整他的优先级。因此,它是在内存中低到一定限度时才会自动运行,从而实现对内存的回收。这就是垃圾回收的时间不确定的原因。

为何要这样设计:因为GC也是进程,也要消耗CPU等资源,如果GC执行过于频繁会对java的程序的执行产生较大的影响(java解释器本来就不快),因此JVM的设计者们选着了不定期的gc。

GC有关的是: runtime data area 中的 heap(对象实例会存储在这里) 和 gabage collector方法。
程序运行期间,所有对象实例存储在运行时数据区域的heap中,当一个对象不再被引用(使用),它就需要被收回。在GC过程中,这些不再被使用的对象从heap中收回,这样就会有空间被循环利用。
GC为内存中不再使用的对象进行回收,GC中调用回收的方法--收集器garbage collector. 由于GC要消耗一些资源和时间,Java 在对对象的生命周期特征(eden or survivor)进行分析之后,采用了分代的方式进行对象的收集,以缩短GC对应用造成的暂停。

在垃圾回收器回收内存之前,还需要一些清理工作。
因为垃圾回收gc只能回收通过new关键字申请的内存(在堆上),但是堆上的内存并不完全是通过new申请分配的。还有一些本地方法(一般是调用的C方法)。这部分“特殊的内存”如果不手动释放,就会导致内存泄露,gc是无法回收这部分内存的。
所以需要在finalize中用本地方法(native method)如free操作等,再使用gc方法。显示的GC方法是system.gc()

垃圾回收技术

方法一:引用计数法。简单但速度很慢。缺陷是:不能处理循环引用的情况。
方法二:停止-复制(stop and copy)。效率低,需要的空间大,优点,不会产生碎片。
方法三:标记 - 清除算法 (mark and sweep)。速度较快,占用空间少,标记清除后会产生大量的碎片。

JAVA虚拟机中是如何做的?
java的做法很聪明,我们称之为"自适应"的垃圾回收器,或者是"自适应的、分代的、停止-复制、标记-清扫"式垃圾回收器。它会根据不同的环境和需要选择不同的处理方式。

参考:http://blog.csdn.net/lzxadsl/article/details/50159939

4.类加载机制?

类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件。在Java中,类装载器把一个类装入JVM中,要经过以下步骤:

 (1) 装载:查找和导入Class文件;

 (2) 链接:把类的二进制数据合并到JRE中;

    (a)校验:检查载入Class文件数据的正确性;

    (b)准备:给类的静态变量分配存储空间;

    (c)解析:将符号引用转成直接引用;

 (3) 初始化:对类的静态变量,静态代码块执行初始化操作

参考:http://blog.csdn.net/fgets/article/details/52934178

5.JVM优化?

参考:http://blog.csdn.net/kefengwang/article/details/54378235

6.说说对KAFAKA的理解?

现代的互联网分布式系统,只要稍微大一些,就一定逃不开3类中间件:远程调用(RPC)框架、消息队列、数据库访问中间件。Kafka 是消息队列中间件的代表产品,用 Scala 语言实现.

参考:https://www.cnblogs.com/yangxiaoyi/p/7359236.html

7.说一下多线程的实现,同步,异步,优化?

     答:  同步就是一件事,一件事情一件事的做。
            异步就是,做一件事情,不引响做其他事情。

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口;

同步的实现方面有两种,分别是synchronized,waitnotify

多线程优化参考:http://blog.csdn.net/luofenghan/article/details/78596950

8.说一下线程池?线程池里面的线程的状态有哪些?

线程池作用:简单说,频繁地创建和关闭线程是非常耗CPU资源的,线程池可以减少开销

理解线程池参考:https://www.cnblogs.com/aspirant/p/6920418.html

线程池状态:http://blog.csdn.net/l_kanglin/article/details/57411851

9.数据结构有哪些?

答:http://blog.csdn.net/gzl0524/article/details/78929154

10.hashmap和hashtable的区别?hashmap的数据结构?hash的具体实现?

答:http://blog.csdn.net/fujiakai/article/details/51585767

11.设计模式有了解哪些?谈一下单例模式,工厂模式,代理模式

答:顺便说一下spring的aop是基于代理模式的,可以实现日志记录功能等

12.集合的分类和各自原理?

答:http://blog.csdn.net/qq_35124535/article/details/66971650

13.分布式和集群区别?

答:集群是个物理形态,分布式是个工作方式

参考:http://huangyongxing310.iteye.com/blog/2317865

14.数据库的锁

答:

      锁机制有两个层面。

       一种是代码层次上的,如java中的同步锁,典型的就是同步关键字synchronized,这里我不在做过多的讲解,

       感兴趣的可以参考:http://www.cnblogs.com/xiohao/p/4151408.html

       另外一种是数据库层次上的,比较典型的就是悲观锁和乐观锁。就是悲观锁(传统的物理锁)和乐观锁。

15.java中事务介绍

答:http://blog.csdn.net/sinat_33536912/article/details/51200630

16.jvm内存管理机制?

答:https://www.cnblogs.com/newyunhe/articles/5001056.html

17.Concurrent包的熟悉

18.数据库的各种锁的机制

答:http://blog.csdn.net/lexang1/article/details/52248686

19.索引的类型和各自实现

答:https://www.cnblogs.com/barrywxx/p/4351901.html

20.高并发理解和解决办法

答:http://blog.csdn.net/systemzyf/article/details/70258041

21.数据库的优化?

答:最好不要设置null值,避免sql语句中进行计算,避免In,导致全表扫描

22.分布式下线程同步怎样处理问题?

答:http://www.fx361.com/page/2017/0309/1098261.shtml

23.如何处理并发和同步?

答:http://betakoli.iteye.com/blog/2257095


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值