java程序猿必修技能

JAVA 基础

1. Java 中的几种基本数据类型是什么,各自占用多少字节。

 2. String 类能被继承吗,为什么。

 3. String,Stringbuffer,StringBuilder的区别。

 4. ArrayList 和 LinkedList 有什么区别。

 5. 讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候,他们的执行顺序。

 6. 用过哪些 Map 类,都有什么区别,HashMap 是线程安全的吗,并发下使用的 Map 是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。

7. JAVA8 的 ConcurrentHashMap为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何设计。

8. 有没有有顺序的Map 实现类,如果有,他们是怎么保证有序的。

9. 抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么。

10. 继承和聚合的区别在哪。

11. 讲讲你理解的 nio。他和 bio 的区别是啥,谈谈 reactor 模型。 

12. 反射的原理,反射创建类实例的三种方式是什么。

 13. 反射中,Class.forName 和 ClassLoader 区别。

 14. 描述动态代理的几种实现方式,分别说出相应的优缺点。

 15. 动态代理与cglib 实现的区别。

 16. 为什么CGlib 方式可以对接口实现代理。

 17. final的用途。

18. 出三种单例模式实现。

19. 如何在父类中为子类自动完成所有的 hashcode 和 equals 实现?这么做有何优劣。 

20. 请结合 OO 设计理念,谈谈访问修饰符 public、private、protected、default 在应用设计中的作用。

21. 深拷贝和浅拷贝区别。 

22. 数组和链表数据结构描述,各自的时间复杂度。 

23. error 和 exception 的区别,CheckedException,RuntimeException 的区别。 

24. 请列出 5 个运行时异常。

25. 在自己的代码中,如果创建一个 java.lang.String 对象,这个对象是否可以被类加载器加载?为什么。

26. 说一说你对 java.lang.Object 对象中 hashCode 和 equals 方法的理解。在什么场景下需要重新实现这两个方法。 

27. 在 jdk1.5 中,引入了泛型,泛型的存在是用来解决什么问题。 

28. 这样的 a.hashcode() 有什么用,与 a.equals(b)有什么关系。

29. 有没有可能 2 个不相等的对象有相同的 hashcode。

30. Java 中的 HashSet 内部是如何工作的。 

31. 什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决。 

JVM 知识

1. 什么情况下会发生栈内存溢出。

2. JVM 的内存结构,Eden 和 Survivor 比例。 

3. jvm 中一次完整的 GC 流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的 jvm 参数。 

4. 你知道哪几种垃圾收集器,各自的优缺点,重点讲下 cms,包括原理,流程,优缺点 

5. 垃圾回收算法的实现原理。 

6. 当出现了内存溢出,你怎么排错。 

7. JVM 内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作内存等。

8. 简单说说你了解的类加载器。 

9. 讲讲 JAVA 的反射机制。 

10. 你们线上应用的 JVM 参数有哪些。 

11. g1 和 cms 区别,吞吐量优先和响应优先的垃圾收集器选择。 

12. 请解释如下 jvm 参数的含义:

 

[plain] view plain copy
 
 
  1. -server -Xms512m -Xmx512m -Xss1024K  
  2.    
  3. -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。  
  4.    
  5. http://blog.csdn.net/a503921892/article/details/39048889  
  6. Xmx3550m:设置JVM最大可用内存为3550M。  
  7. -Xms3550m:设置JVM初始内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。  
  8. -Xss128k: 设置每个线程的堆栈大小。在相同物理内 存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,  
  9. 经验值在3000~5000左右  
  10. -XX:MaxPermSize=16m:设置持久代大小为16m  
  11.  -XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。  
  12. 如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。  

 

开源框架知识

1. 简单讲讲 tomcat 结构,以及其类加载器流程。 

2. tomcat 如何调优,涉及哪些参数。 

3. 讲讲 spring 加载流程。 

4. 讲讲 Spring 事务的传播属性。

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

5. Spring 如何管理事务的。 

6. Spring 怎么配置事务(具体说出一些关键的 xml元素)。

7. 说说你对 Spring 的理解,非单例注入的原理?它的生命周期?循环注入的原理,aop 的实现原理,说说 aop 中的几个术语,它们是怎么相互工作的。

8. Springmvc 中 DispatcherServlet初始化过程。

操作系统

1. Linux 系统下你关注过哪些内核参数,说说你知道的。 

2. Linux 下 IO 模型有几种,各自的含义是什么。 

3. epoll 和 poll 有什么区别。 

4. 平时用到哪些 Linux 命令。

5. 用一行命令查看文件的最后五行。

6. 用一行命令输出正在运行的 java 进程。 

7. 介绍下你理解的操作系统中线程切换过程。 

8. 进程和线程的区别。 

多线程

1. 多线程的几种实现方式,什么是线程安全。 

2. volatile 的原理,作用,能代替锁么。 

3. 画一个线程的生命周期状态图。 

4. sleep 和 wait 的区别。 

5. Lock 与 Synchronized 的区别。 

6. synchronized 的原理是什么,解释以下名词:重排序,自旋锁,偏向锁,轻量级锁,可重入锁,公平锁,非公平锁,乐观锁,悲观锁。 

7. 用过哪些原子类,他们的原理是什么。 

8. 用过线程池吗,newCache 和 newFixed 有什么区别,他们的原理简单概括下,构造函数的各个参数的含义是什么,比如 coreSize,maxsize 等。

9. 线程池的关闭方式有几种,各自的区别是什么。 

10. 假如有一个第三方接口,有很多个线程去调用获取数据,现在规定每秒钟最多有 10 个线程同时调用它,如何做到。 

11. spring 的 controller 是单例还是多例,怎么保证并发的安全。

12. 用三个线程按顺序循环打印 abc 三个字母,比如 abcabcabc。

13. ThreadLocal 用过么,用途是什么,原理是什么,用的时候要注意什么。 

14. 如果让你实现一个并发安全的链表,你会怎么做。 

15. 有哪些无锁数据结构,他们实现的原理是什么。 

16. 讲讲 java 同步机制的 wait 和 notify。 

17. 多线程如果线程挂住了怎么办。 

18. countdowlatch 和 cyclicbarrier的内部原理和用法,以及相互之间的差别。 

19. 使用 synchronized 修饰静态方法和非静态方法有什么区别。

20. 简述 ConcurrentLinkedQueue 和 LinkedBlockingQueue 的用处和不同之处。 

21. 导致线程死锁的原因?怎么解除线程死锁。 

22. 非常多个线程(可能是不同机器),相互之间需要等待协调,才能完成某种工作,问怎么设计这种协调方案。

23. 正确使用 Volatile 变量

TCP 与 HTTP

1. http1.0 和 http1.1 有什么区别。 

2. TCP 三次握手和四次挥手的流程,为什么断开连接要 4次,如果握手只有两次,会出现什么。 

3. TIME_WAIT 和 CLOSE_WAIT 的区别。 

4. 说说你知道的几种 HTTP 响应码,比如 200, 302, 404。 

5. 当你用浏览器打开一个链接的时候,计算机做了哪些工作步骤。 

6. TCP/IP 如何保证可靠性,说说 TCP 头的结构。 

7. 如何避免浏览器缓存。 

8. 简述 Http 请求 get 和 post 的区别以及数据包格式。 

9. 简述 HTTP 请求的报文格式。 

10. HTTPS 的加密方式是什么,讲讲整个加密解密流程。 

架构设计与分布式

 1. 常见的缓存策略有哪些,你们项目中用到了什么缓存系统,如何设计的。 

2. 用 java 自己实现一个 LRU。 

3. 分布式集群下如何做到唯一序列号。 

4. 设计一个秒杀系统,30 分钟没付款就自动关闭交易。 

5. 如何使用 Redis 和 zookeeper 实现分布式锁?有什么区别优缺点,分别适用什么场景。 

6. 如果有人恶意创建非法连接,怎么解决。 

7. 分布式事务的原理,优缺点,如何使用分布式事务。 

8. 什么是一致性 hash。 

9. 什么是 restful,讲讲你理解的 restful。 

10. 如何设计建立和保持 100w 的长连接。 

11. 如何防止缓存雪崩。 

12. 解释什么是 MESI 协议(缓存一致性)。 

13. 说说你知道的几种 HASH 算法,简单的也可以。 

14. 什么是 paxos 算法。 

15. 什么是 zab 协议。 

16. 一个在线文档系统,文档可以被编辑,如何防止多人同时对同一份文档进行编辑更新。 

17. 线上系统突然变得异常缓慢,你如何查找问题。

18. 说说你平时用到的设计模式。 

19. Dubbo 的原理,数据怎么流转的,怎么实现集群,负载均衡,服务注册和发现。重试转发,快速失败的策略是怎样的。 

20. 一次 RPC 请求的流程是什么。 

21. 异步模式的用途和意义。 

22. 缓存数据过期后的更新如何设计。 

23. 编程中自己都怎么考虑一些设计原则的,比如开闭原则,以及在工作中的应用。 

24. 设计一个社交网站中的“私信”功能,要求高并发、可扩展等等。画一下架构图。 

25. MVC 模式,即常见的 MVC 框架。 

26. 聊了下曾经参与设计的服务器架构。 

27. 应用服务器怎么监控性能,各种方式的区别。 

28. 如何设计一套高并发支付方案,架构如何设计。 

29. 如何实现负载均衡,有哪些算法可以实现。 

30. Zookeeper 的用途,选举的原理是什么。 

31. Mybatis 的底层实现原理。

 

[plain] view plain copy
 
 
  1. MyBatis底层就是JDBC   所以他的核心就是配置文件  :  
  2.    
  3.       1:全局配置文件 (配置数据源 事务运行时信息)  
  4.       2:映射文件(执行statement的相关信息,包括SQL语句,输入参数,输出结果)  
  5.       MyBatis把全局配置文件加载到内容中 构建出SqlSessionFactory    ,这个工厂的作用相当于生产对象生产SqlSession。  
  6.      SqlSession   :它是一个面向程序员的接口,可以操作数据库。 接口有一个默认实现DefaultSqlSession。  
  7. 在SqlSession   中有一个executor 执行器。  SqlSession   本身不能操作数据库 需要通过这个执行器去操作。有2个实现 一个叫做基本执行器,还有一个缓存执行器  
  8. (默认)。 MappedStatement:封装了执行Statement信息,包括SQL语句 输入参数,输出结果。由它去操作数据库。  
  9.    
  10. 输入输出参数类型:  
  11.             1:基本类型  
  12.             2:自定义类型  
  13.             3:hashmap  
  14.    
  15. 根据源码:看到Sqlsession内部并不能直接操作数据库。而是利用内部的一个执行器去操作数据库。执行器执行的时候会去执行MappedStatement   
  16. 到最后才去真正执行数据库。  

32. 请思考一个方案,设计一个可以控制缓存总体大小的自动适应的本地缓存。 

33. 请思考一个方案,实现分布式环境下的 countDownLatch。 

34. 后台系统怎么防止请求重复提交。 

35. 如何看待缓存的使用(本地缓存,集中式缓存),简述本地缓存和集中式缓存和优缺点。本地缓存在并发使用时的注意事项。 

36. 描述一个服务从发布到被消费的详细过程。 

37. 讲讲你理解的服务治理。 

38. 如何做到接口的幂等性。 

算法  

1. 10 亿个数字里里面找最小的 10 个。 

2. 有 1 亿个数字,其中有 2 个是重复的,快速找到它,时间和空间要最优。 

3. 2 亿个随机生成的无序整数,找出中间大小的值。 

4. 给一个不知道长度的(可能很大)输入字符串,设计一种方案,将重复的字符排重。 

5. 遍历二叉树。 

6. 有 3n+1 个数字,其中 3n 个中是重复的,只有 1 个是不重复的,怎么找出来。 

7. 写一个字符串反转函数。 

8. 常用的排序算法,快排,归并、冒泡。 快排的最优时间复杂度,最差复杂度。冒泡排序的优化方案。 

9. 二分查找的时间复杂度,优势。 

10. 一个已经构建好的 TreeSet,怎么完成倒排序。 

11. 什么是 B+树,B-树,列出实际的使用场景。

SQL

1. 行转列

姓名       课程       分数

---------- ---------- -----------

张三       语文        74

张三       数学        83

张三       物理        93

李四       语文        74

李四       数学        84

李四       物理        94

 

[plain] view plain copy
 
 
  1. SELECT 姓名,  
  2.  max(CASE 课程 WHEN'语文' THEN 分数 ELSE 0 END) 语文,  
  3.  max(CASE 课程 WHEN'数学' THEN 分数 ELSE 0 END) 数学,  
  4.  max(CASE 课程 WHEN'物理' THEN 分数 ELSE 0 END) 物理  
  5. FROM tb  
  6. GROUP BY 姓名  
  7.    
  8. 姓名       语文        数学        物理  
  9. ---------- ----------- ----------- -----------  
  10. 李四        74          84          94  
  11. 张三        74          83          93  

 

2. MySQL存储引擎- MyISAM与InnoDB区别

 

[plain] view plain copy
 
 
  1. InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,  
  2. 而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。  
  3.    
  4. 两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁。而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用  

原文转载:http://blog.csdn.net/u014731752/article/details/69568406?locationNum=5&fps=1

posted @ 2018-01-11 22:17  Andy奥  阅读(178)  评论(0编辑  收藏  举报