阿里面试-2018

(一) Java 编程方面

 1、 如何DUMP内存出来看看内存溢出呢

DUMP分为两种:

(a)内存dump是指通过jmap -dump <pid>输出的文件,

(b而线程dump是指通过jstack <pid>输出的信息。

两个dump可以单独使用,也可以在特定场合下结合使用。

参考:Jvm dump介绍与使用(内存与线程)

 

 2、现在我的端口8080被占用了,如何找出这个进程来用哪个命令; 

  参考:如何在Windows下查看JAVA端口占用情况(阿里面试)

3、查看进程的CPU使用率:

 > jstat -gc 7964 5000 

代表: 每隔5秒钟查看进程7964的内存使用情况;

参考:Java JVM- jstat查看jvm的GC情况

(二) 基础知识方面

1、 JDK1.7 月JDK1.8的区别和联系:

参考:Jdk1.7 与 jdk1.8的区别,最新的特征有哪些(美团,360,京东面试题目)

2、Java 基础知识,Java堆内存结构, 新生代,老年代如何定义,划分,CMS,G1的算法是怎样的,性能瓶颈,调优。垃圾回收算法。

类加载技术,当类加载的时候,我想改一下值用Java探针技术,class类在加载的时候 Java探针技术,可以在加载class的时候改变 对象的值;

参考:CMS收集器和G1收集器优缺点

参考:G1 垃圾收集器入门

参考:图解 CMS 垃圾回收机制原理,-阿里面试题

关于Java探针的可以参考:Java探针-Java Agent技术-阿里面试题

3、NIO 和IO 的含义,以及他们的三个区别

我以为NIO指的是 Non Block 但是面试官指的是New IO 和IO的区别,我傻眼了。

(a)这是No-Block IO 和IO 的区别和联系

参考:IO多路复用,同步,异步,阻塞和非阻塞 区别

(b)这是Java1.4之后出的New IO 与IO的区别和联系:

参考:Java NIO:IO与NIO的区别 -阿里面试题

 

4、HashMap的Hashcode和equal 的区别

参考:Java == ,equals 和 hashcode 的区别和联系(阿里面试)

5、ThreadLocal 类掌握情况。存储在那里?当数值更新后,如何处理,让全局都更新呢

 参考:ThreadLocal 定义,以及是否可能引起的内存泄露(用线程池有可能泄露)

8、读写锁,多个读锁互不影响,写写互斥,写锁优先于读锁:

读写锁特点:

a)多个读者可以同时进行读
b)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)
c)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)

 参考:Java 线程锁机制 -Synchronized Lock 互斥锁 读写锁

(三) 数据结构方面

1、 Synochronized 和 Voliate的区别, 涉及到的CAS处理

参考:JAVA多线程之volatile 与 synchronized 的比较-阿里面试题

参考:java并发中的原子变量和原子操作以及CAS介绍

2、concurrentHashMap 在1.7与1.8底下的区别,

JDK1.7版本的ReentrantLock+Segment+HashEntry,到JDK1.8版本中synchronized+CAS+HashEntry+红黑树,

参考:ConcurrentHashMap原理分析(1.7与1.8)

3、阿里的第二面是去阿里本部面试的环节对数据结构要求很高,

我曾问过阿里面试人员需要了解哪些数据结构知识才能面试通过,

阿里面试官答道:只要把HashMap,HashTable,HashSet,CurrentHashMap的原理搞清楚了,数据结构面试一定没问题。所以,弟兄们,想进阿里

一定要把这几个数据结构搞清楚。

参考:Hashtable数据存储结构-遍历规则,Hash类型的复杂度为啥都是O(1)

参考:HashMap的实现原理--链表散列

HashMap,HashSet,Hashtable 的复杂度是O(1),

TreeMap,TreeSet内部排序了使用了红黑树,因此时间复杂度是O(log(n))

参考:HashMap, HashTable,HashSet,TreeMap 的时间复杂度

红黑树,因为只搜索一边,因此复杂度连O(n)都到不了,只要log(n) 就够了。

时间复杂度;如何计算的,好好看看

HashMap,HashTable ,CurrentHashMap的区别

HashTable不允许有空值,HashMap 的key和value允许有空值,因此不能用HashMap的get()方法判断是否有指定的值,应该用containsKey();

参考:HashMap和HashTable的区别

参考:hashmap,hashTable concurrentHashMap 是否为线程安全,区别,如何实现的

 4、TreeMap 内部如何实现排序的,比如现在已经有一个treeMap对象了,很多数据,现在我要添加一个数据map.put(a,b),TreeMap是如何快速寻找到 a对象的位置的?

(四) 多线程方面

1、ReentrantLock 可重入锁,指的是什么可重入(举个例子,这个一定要重视,两个阿里的面试官都问到了)。如何理解,公平锁,非公平锁。

可重入指的是:线程第一次进入加锁了之后,以后就不需要获取锁了,:

 参考:ReentrantLock实现原理-何为可重入

公平锁参考:分析ReentrantLock的实现原理

参考:ReentrantLock实现原理

可重入锁,synchroized 和 ReentrantLock都是可重入锁,就是AQS的state设置为1,2.。之类的,只要不是state=0,(0代表了释放锁)其他的锁都一直等待,

要不然就成了死锁了,这里有个很形象的说明,

请参考:轻松学习java可重入锁(ReentrantLock)的实现原理

参考: java并发锁ReentrantLock源码分析一 可重入支持中断锁的实现原理

用Synchronized实现ReentrantLock:

参考:使用synchronized实现一个Lock-美团面试题目

2、如何实现多线程,Java线程池,如果使用 newFixedPool(20)如果 目前有30个进程过来,他是如何排队实现一个个执行的。哪来的队列;

参考:多线程之线程池-各个参数的含义- 阿里面试题目

参考:聊聊并发(七)——Java中的阻塞队列

参考:Java多线程——<五>后台线程(daemon)

参考:Java中的多线程=你只要看这一篇就够了 

3、Sleep 和Wait的区别 ,他们的CPU有没有释放内存

参考:sleep、yield、wait、join的区别(阿里面试)

4、start,run的区别;

参考:多线程-Thread的run()与start()的区别

(五) Spring方面

1、Spring Boot 是否用过,

   Spring Cloud 多看看,了解太少,不光是可以转变成 RPC,框架,还可以整体提高延迟多少秒,寻找最近的路由规则,

 2、Spring 加载流程,Spring的框架知识包括IOC,AOP ,事务处理

(六) 部署 网络架构搭建方面

 1、Docker:是一个容器;

参考:Docker 入门 到部署Web 程序

2、RPC有没有用过相应的框架,比如google的JRPC,Docker不是RPC,它只是个容器,(这个问题,360,美团,阿里,京东都问过);

   (a)RPC用什么协议通讯的

3、分布式部署,分布式事务。是否理解,是否用过,3次阿里的面试均提到这个问题,一定要了解; 

4、大型web服务器架构如何设计

(a) 比如数据库设计,读写分离==》一个Master主数据库负责读写,多个Slave从数据库读,使用BinLog实时同步从数据库,不能乱了

参考:数据库读写分离和数据一致性的冲突

5、Flame, ETL (数据仓库技术) 好好看看 这个,技术

ETL技术参考:ETL工具之Kettle的简单使用一(不同数据库之间的数据抽取-转换-加载)

参考:ETL技术( Extract-Transform-Load) 数据仓库技术-比如kettle

6、zookeeper是如何注册服务,并负载均衡的

参考:zookeeper如何实现负载均衡的?(具体连接哪一个zookeeper服务器的选择?)阿里面试

7、Tomcat,Jboss的类加载顺序

参考:图解Tomcat类加载机制(阿里面试题)

(七) 数据库方面

(1)数据库隔离级别与脏读,可重复读。幻读的区别

总结: 5个隔离级别 与脏读,不可重复读,幻读的关系:

ISOLATION_DEFAULT 使用后端数据库默认的隔离级别
ISOLATION_READ_UNCOMMITTED 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
ISOLATION_READ_COMMITTED

允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生

Oracle和SQL Server  默认 都是 READ_COMMITTED

ISOLATION_REPEATABLE_READ

对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生

Mysql 默认就是REPEATABLE READ

ISOLATION_SERIALIZABLE 最高的隔离级别,完全服从ACID的隔离级别,确保阻止脏读、不可重复读以及幻读,也是最慢的事务隔离级别,因为它通常是通过完全锁定事务相关的数据库表来实现的

参考:Spring 学习7 -事务

(2)如果必须要保证一致的话,不能进行读写分离了,可以进行业务拆分,把这部分业务单独拿出来 可以采用多库不区分读写以及memcache缓存技术来实现。

3、redis memechen 的区别和联系。

(八) 协议通讯方面

(1) TCP,UDP的区别,3次握手 4次挥手的流程

参考:TCP协议详解7层和4层解析(美团面试,阿里面试) 尤其是三次握手,四次挥手 具体发送的报文和状态都要掌握

九、Maven方面

如何处理包名冲突,比如A引用了log1.5,B 引用了log1.6,

maven的引用遵循:最短路径和最先引用规则,一般是找到低版本的那个,然后exclusions一下,不然没法用了,循环引用。

不明白的可以看看这个:

参考:Maven 3-Maven依赖版本冲突的分析及解决小结 (阿里,美团,京东面试)

编程题目;

   现在有一张表有很多数据,但是列只有两列,姓名和身份证号,现在想用身份证号的出生年月进行排序,目前给出的CPU内存很小,如何做到最快排序。

参考:面试- 阿里-. 大数据题目- 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

(5)现有两张表 A,B 字段 只有两列,都是 姓名 和身份证号,如何快速的找出相同的记录;

十、搜索引擎框架:

 solr 与 lucene;

参考:solr学习

原文地址:https://www.cnblogs.com/aspirant/p/8625810.html