美文网首页面试fish的猿粪面试题_互联网公司
Java程序猿想超神?先回答这些问题。

Java程序猿想超神?先回答这些问题。

作者: _番茄沙司 | 来源:发表于2016-08-12 15:55 被阅读5153次

    一、Java基础

    1. 实例方法和静态方法有什么不一样?

    2. Java中的异常有哪几类?分别怎么使用?

    3. 常用的集合类有哪些?比如List如何排序?

    4. ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和各自适应的场景是什么?

    5. 内存溢出是怎么回事?

    6. ClassLoader有什么用?

    7. ==和equals的区别?

    8. hashCode方法的作用?

    9. Object类中有哪些方法?列举3个以上。

    10. NIO是什么?适用于何种场景?

    11. HashMap数据结构、扩展策略,Hash冲突攻击如何防范,如何实现线程安全的HashMap?

    12. JVM内存结构,GC算法,CMS、G1的原理

    13. NIO模型,select/epoll的区别,多路复用的原理

    14. Java中一个字符占多少个字节,扩展再问int, long, double占多少字节

    15. 创建一个类的实例都有哪些办法?

    16. final/finally/finalize的区别?

    17. LinkingBlockingQueue与ArrayBlockingQueue的区别,他们的适用场景?

    18. Session/Cookie的区别?

    19. String/StringBuffer/StringBuilder的区别,扩展再问他们的实现?

    20. Servlet的生命周期?

    21. 如何用Java分配一段连续的1G的内存空间?需要注意些什么?

    22. Java有自己的内存回收机制,但为什么还存在内存泄露的问题呢?

    23. Java里面用对象作为Key需要注意些什么? 如何实现hashcode?

    二、JVM

    1. JVM堆的基本结构。

    2. JVM的垃圾算法有哪几种?CMS收集算法的流程?

    3. JVM有哪些常用启动参数可以调整?

    4. 如何查看JVM的内存使用情况?

    5. Java程序是否会内存溢出?

    6. 你常用的JVM配置和调优参数都有哪些?分别什么作用?

    7. Java内存分代模型,GC算法,JVM常见的启动参数;

    8. CMS算法的过程,CMS回收过程中JVM是否需要暂停(这块回答较好,也可以只是看毕玄的Java分布式开发或网上文章的学习, 可以结合JVM启动参数常见配置,jstat等命令,看下动手能力,意愿;以及实际线上问题排查)

    9. 什么情况下会出现OOM(堆内存,永久区,堆外区,方法栈)

    10. Java内存结构(堆结构,新生代[S0/S1/Elden],年老代,持久代)

    11. 常用的GC策略,什么时候会触发YGC,什么时候触发FGC

    三、数据结构与算法基础

    1. 说一下几种常见的排序算法和分别的复杂度。

    2. 什么是跳表?

    3. 如何确认一个链表有环?进一步,确认环的位置。

    4. 如何遍历一棵二叉树?

    5. 倒排一个LinkedList。

    6. HashSet的实现方式

    四、多线程/并发

    1. Java中常见的锁,互斥锁,读写锁,信号量

    2. 原子Atomic类,如何保证原子性,CAS硬件指令

    3. volatile,可见性问题的原因,硬件架构,L3 Cache,QPI,乐观锁

    4. 如何实现一个线程安全的数据结构

    5. 如何避免死锁

    6. 如何解决ABA问题

    7. Synchronized关键字的作用?

    8. Volatile关键字的作用?

    9. Java内存模型是怎样的?

    10. HashMap在多线程环境下使用需要注意什么?为什么?

    11. Java程序中启动一个线程是用run()还是start()?

    12. 什么是守护线程?有什么用?

    13. 什么是死锁?如何避免

    14. 线程和进程的差别是什么?

    15. Java里面的Threadlocal是怎样实现的?

    16. ConcurrentHashMap的实现原理是?

    17. sleep和wait区别

    18. notify和notifyAll区别

    19. volatile关键字的作用

    20. ThreadLocal的作用与实现

    21. 两个线程如何串行执行

    22. 上下文切换是什么含义

    23. 可以运行时kill掉一个线程吗?

    24. 什么是条件锁、读写锁、自旋锁、可重入锁?

    25. 什么是协程(用户态线程,减少数据拷贝,降低CPU开销,无callback函数)?

    26. 线程池ThreadPoolExecutor的实现原理?

    27. J.U.C下的常见类的使用。lock, synchronized, ThreadPool的深入考察; BlockingQueue的使用。(take,poll的区别,put,offer的区别);原子类的实现。

    28. 各种常见锁使用如果上面这些掌握很好,还可以看看更深一点的 False Sharing,Cache Line,可见性与原子性等;

    五、Linux使用与问题分析排查

    1. 硬链接和软链接的区别?

    2. inode是什么?

    3. Linux常用命令有哪些?

    4. 怎么看一个Java线程的资源耗用?

    5. Load过高的可能性有哪些?

    6. /etc/hosts文件什么做用?

    7. /etc/resolv.conf文件什么作用?

    8. 如何快速的将一个文本中所有“abc”替换为“xyz”?

    9. 你常用的Linux下用来进行网络和磁盘IO分析的工具有哪些?

    10. 你常用的Linux下用来进行内存和CPU分析的工具有哪些?

    11. 发现磁盘空间不够,如何快速找出占用空间最大的文件?

    12. Java服务端问题排查(OOM,CPU高,Load高,类冲突)

    13. Java常用问题排查工具及用法(top, iostat, vmstat, sar, tcpdump, jvisualvm, jmap, jconsole)

    14. Thread dump文件如何分析(Runnable,锁,代码栈,操作系统线程ID关联)

    15. grep,awk,sed; 是否自己写过shell脚本;

    16. 常见的cpu load过高,us过高,一般是什么问题。引申出是否用过top,jstat,jstack等。

    17. 常见的内存问题一般有哪些。 引申出是否用过free,top, jmap等。

    六、框架使用

    1. Spring中Bean的生命周期。

    2. SpringMVC或Struts处理请求的流程。

    3. Spring AOP解决了什么问题?怎么实现的?aop与cglib,与asm的关系。

    4. Spring事务的传播属性是怎么回事?它会影响什么?

    5. Spring中BeanFactory和FactoryBean有什么区别?

    6. Spring框架中IOC的原理是什么?

    7. spring的依赖注入有哪几种方式

    8. struts工作流程

    9. 用Spring如何实现一个切面?

    10. Spring 如何实现数据库事务?

    11. Hibernate和Ibatis这类ORM框架的区别?什么是ORM,解决的痛点是什么?

    12. spriong ioc的生命周期,(init-method,intilizingbean接口方法afterPropertiesSet的先后顺序)等。

    13. Hibernate对一二级缓存的使用,Lazy-Load的理解;

    14. Spring IoC AOP自己用代码如何实现

    15. RPC的负载均衡、服务发现怎么做的

    16. 几种推送模型的区别,long polling,websocket

    七、数据库相关

    1. MySQL InnoDB的特点?

    2. 乐观锁和悲观锁的区别?

    3. 数据库隔离级别是什么?有什么作用?

    4. MySQL主备同步的基本原理。

    5. 如何从一张表中查出name字段包含“XYZ”的所有行?

    6. 索引数据结构(字典+BitTree)

    7. 如何优化数据库性能(索引、分库分表、批量操作、分页算法、升级硬盘SSD、业务优化、主从部署)

    8. SQL什么情况下不会使用索引(不包含,不等于,函数)

    9. 一般在什么字段上建索引(过滤数据最多的字段)

    10. 如何从一张表中查出name字段不包含“XYZ”的所有行?

    11. MySQL,B+索引实现,行锁实现,SQL优化

    12. Redis,RDB和AOF,如何做高可用、集群

    13. 如何解决高并发减库存问题

    14. mysql存储引擎中索引的实现机制;

    15. 数据库事务的几种粒度;

    16. 行锁,表锁;乐观锁,悲观锁

    八、网络协议和网络编程

    1. TCP建立连接的过程。

    2. TCP断开连接的过程。

    3. 浏览器发生302跳转背后的逻辑?

    4. HTTP协议的交互流程。HTTP和HTTPS的差异,SSL的交互流程?

    5. Rest和Http什么关系? 大家都说Rest很轻量,你对Rest风格如何理解?

    6. TCP的滑动窗口协议有什么用?讲讲原理。

    7. HTTP协议都有哪些方法?

    8. 交换机和路由器的区别?

    9. 什么是VLAN,有什么作用?

    10. 什么是VXLAN,有什么作用?

    11. http协议(报文结构,断点续传,多线程下载,什么是长连接)

    12. tcp协议(建连过程,慢启动,滑动窗口,七层模型)

    13. webservice协议(wsdl/soap格式,与rest协议的区别)

    14. spdy/http2.0协议是否有了解

    15. NIO的好处,Netty线程模型,什么是零拷贝

    九、Redis等缓存系统/中间件/NoSQL/一致性Hash等

    1. 列举一个常用的Redis客户端的并发模型。

    2. HBase如何实现模糊查询?

    3. 列举一个常用的消息中间件,如果消息要保序如何实现?

    4. 如何实现一个Hashtable?你的设计如何考虑Hash冲突?如何优化?

    5. 分布式缓存,一致性hash

    6. LRU算法,slab分配,如何减少内存碎片

    7. 如何解决缓存单机热点问题

    8. 什么是布隆过滤器,其实现原理是? False positive指的是?

    9. memcache与redis的区别

    10. zookeeper有什么功能,选举算法如何进行

    11. map/reduce过程,如何用map/reduce实现两个数据源的联合统计

    十、设计模式与重构

    1. 你在设计一个工厂的包的时候会遵循哪些原则?

    2. 你能列举一个使用了Visitor/Decorator模式的开源项目/库吗?

    3. 你在编码时最常用的设计模式有哪些?在什么场景下用?

    4. 如何实现一个单例?

    5. 代理模式(动态代理)

    6. 单例模式(懒汉模式,恶汉模式,并发初始化如何解决,volatile与lock的使用)

    7. JDK源码里面都有些什么让你印象深刻的设计模式使用,举例看看?

    8. Reactor模式

    十一、学习与进取心

    1. 平时会关注哪些技术?

    2. 会看那些技术博客和网站?

    3. 技术上有没有偶像?

    4. 看过哪些技术书籍?

    5. 你平常都看些什么书?你去年和今年看的书中印象最深的基本技术书籍和非技术书籍是?

    6. (如果不看书)你平常都上哪些技术论坛?最喜欢哪个?为什么?

    7. 项目或产品中用到了什么新技术或框架

    8. 最近研究过什么业界流行的技术或框架

    9. 对现在所做的项目或产品的缺陷是否了解,有何规划

    10. 是否有带过项目,如何管理项目

    11. 是否有带过团队,团队管理最大的挑战点是什么

    十二、抗压能力及抗压意愿

    1. 刚才你说的XXX实现跟那个开源的YYY很像,是不是抄来的?

    2. 对加班怎么看?

    3. 平台是否有加班,是主动还是被动,是否非常抗拒

    4. 是否有负责多件事情,多件事情如何并行处理

    5. 你对你最近负责项目中最自豪的点是什么?

    十三、开放性问题

    1. 一个大文件4G,里面一行行的数字,这时内存只有256M,如果做排序?

    2. 如果你部署的应用所在机器硬盘坏了,会发生什么?你的程序要如何处理这种异常?(分布式系统中故障是一种常态,设计要避免单点故障,能容错,保证系统高可用)

    3. 实现一个消息队列系统

    4. 如何设计一个高可用的架构

    5. 多次Hash来解决URL重复访问问题。

    6. 全局唯一ID问题。

    7. 秒杀如何设计。

    8. 如何进行性能优化。

    9. 发现CPU 100%,如何排查?

    10. 实现一个分布式打点系统。

    11. taobao.com和tmall.com的互相登录的问题。

    12. 如何快速对一个2亿数据的List进行排序?

    相关文章

      网友评论

      • 半天想不出来:楼主说好的答案呢
      • 8e0be3af20d9:这套题很符合阿里的口味啊!
      • xupengwei:这题库似曾相识
      • 木末兮:感觉非常不错呀,准备在博客里一个一个尝试回答这些问题
        _番茄沙司:@木末兮 加油
      • 十四zx:看来需要补。。
        纪录t:@十四zx 作者有没有答案啊?我正在面试~
      • 面壁者1:不错~
      • 齐原缘:能不能推荐一下开学准新生软件工程的妹子可以看一下哪些书呢?😊
        齐原缘: @_番茄沙司 不问为什么 😌 谢谢(学长)咯😊
        _番茄沙司:@花花草草爱吹风 你也可以加我微信或扣扣,32058493.有啥问题可以随时问。
        _番茄沙司:@花花草草爱吹风 大一啊?没啥特别要看的。如果你们有计算机导论这门课,好好学,一定要好好学,别问为什么:joy:
      • 帝Bug:背出来和灵活实用是有本质的区别!每个人对技术点的理解和使用方式并不完全一样
      • 毛球儿:配图完美反映了程序员的二次元属性
      • LAVAGUE:这条路水很深…
      • cb16d862bd0a:能全部回答这些问题,并且不百度的都是傻逼。
        _番茄沙司:@围脖上的蚂蚁 有觉悟
        cb16d862bd0a: @浅彻 这些知识虽然很重要,但是工作中百分之九十用不到。等你到一定的level再看吧
        _番茄沙司:@围脖上的蚂蚁 🙄
      • 0416119a816f::joy:看完发现自己只是个砖农,不是程序员....
      • 北潇:这些都懂了,是什么级别呢?
        _番茄沙司:@北潇 阿里一二轮技术面没问题了:grin:
      • c42896a87fb1:这不就是超神之路么
      • kamito:长知识了,我还有很长的路要走😂
      • 604d0f86f275:必须收藏,日后必定前来回答
      • _稻草人:能提供一下答案吗?我自己刚学完JavaSE部分,数据库学了一点
        _番茄沙司:@_小C 你关注我一下吧,后面有时间我会一节节回答?
      • study_xiaozhang:一脸懵逼的样子,看来要恶补了~
      • vsfafa:想全部百度一边都觉得心累 😂
        _番茄沙司:@童彤彤 框架部分不会,我是安卓程序猿:smile:
        vsfafa: @_番茄沙司 可以,全部解答吧。继续关注你哟
        _番茄沙司:@童彤彤 打算后面对每一节做个解答:fearful:但想想就心累。
      • 3dd0d982e008:能问出这些问题,楼主好6
        _番茄沙司:@永燃的瞳术师丶 🙄你满意就好
      • 醉酒肆之:层主已自杀
        _番茄沙司:@醉酒肆之 哈哈
      • Soulfree521:路太长,还需努力
        Soulfree521:@_番茄沙司 加油↖(^ω^)↗
        _番茄沙司:@Soulfree521 一起加油
      • 在北国:作为一名前Java目前Python程序猿表示,除了开放性其他都能刚一波,甚至觉得GC问题深度还不够。
        _番茄沙司:@Findio :grin:
      • 5b50f0f39004:能够提出这些问题的人也是厉害
      • 共轭小王子:我勒个去😂
        _番茄沙司:@绿沙 :kissing_closed_eyes:

      本文标题:Java程序猿想超神?先回答这些问题。

      本文链接:https://www.haomeiwen.com/subject/uxhesttx.html