阿里二面准备(Java 研发),java开发工程师面试技巧

本文详细梳理了Java研发面试的重点,涵盖平衡二叉树、红黑树、B+树、Trie树、链表操作、排序算法、数据结构、异常处理、IO模型、JVM内存、锁机制、垃圾回收、数据库优化、Spring框架、RPC原理等内容,全面解析Java面试的关键知识点,旨在帮助开发者做好二面准备。
摘要由CSDN通过智能技术生成
  • 平衡二叉树
  1. 任何节点的两个儿子子树的高度最大差别为一
  • 红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。
  1. B+树的了解
  • 多分支结构有效降低了树的高度

  • B 树的各种操作能使 B 树保持较低的高度,从而达到有效避免磁盘过于频繁的查找存取操作,从而有效提高查找效率

  1. Trie-Tree 原理及其应用;
  • 字典树

  • 特点

  1. 根节点不包含字符,除根节点外的每一个子节点都包含一个字符。

  2. 从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。

  3. 每个节点的所有子节点包含的字符互不相同。

  • 核心思想是空间换时间

  • 应用

  1. 字符串检索

  2. 词频统计

算法题(剑指 Offer 上原题不少)


  1. 怎么查询一个单向链表的倒数第五个节点

  2. 判断链表是否成环

  3. 两条相交的单向链表,如何求他们的第一个公共节点

  4. 在无序数组中找最大的K个数?

  5. 给定n个数,寻找第k小的数,同时给出时间复杂度

  6. 找一个数组中的第三大数

  7. 找出数组中第一个出现2次的数,

  8. 求 1-N 中数字 1 的个数。

  9. 判断一个数是不是丑数;

  10. 求第 K 个丑数;

  11. 10w行数据,每行一个单词,统计出现次数出现最多的前100个。

  12. 一个文本文件,给你一个单词,判断单词是否出现。

  13. 一进去要求敲代码二叉排序树的插入、删除及查找

  14. 某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新。现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名。用户最大规模为2 亿;积分为非负整数,且小于 100 万;

  15. 判断一棵二叉树是否是 BST。

  16. 一副扑克 54 张牌,现在分成 3 份,每份 18 张,问大小王出现在同一份中的概率是多少;

  17. 50个白球50个红球,两个盒子,怎么放让人随机在一个盒子里抽到红球概率最高。。。这个就是一个盒子放一个红球,另一个盒子放99个球。

  18. logN 查找一个有序数组移动后类似 4 5 6 7 1 2 3里面的一个数

  19. 0 ~ n 连续 n + 1 数,现在有一个长度为 n 的数组存放了上面 n + 1 个数的其中 n 个,找出哪一个数没有被放进数组

  20. 将M个平均长度为N的有序队列组合成一个有序队列

  21. 10亿条短信,找出前一万条重复率高的

  22. 对一万条数据排序,你认为最好的方式是什么

  23. 假如有100万个玩家,需要对这100W个玩家的积分中前100名的积分,按照顺序显示在网站中,要求是实时更新的。积分可能由做的任务和获得的金钱决定。问如何对着100万个玩家前100名的积分进行实时更新?

  • 除了前100名,后100W-100名玩家的积分,让变化的积分跟第100名比较,如果比第100名高,那就替换的原则。

Java 基础


  1. Java 的优势
  • 语法简单

  • 跨平台

  • 当开发规模膨胀到一定程度,Java在规范、协作和性能调优上还是占有很大优势,在大型应用,尤其是企业应用上,Java的地位仍然难以撼动

  1. boolean 占几个字节

  2. 如果 boolean 变量在栈上,那么它占用一个栈单元(32-bits)

  3. 如果在堆上,那么就跟 JVM 的实现有关了

  4. 在 Oracle 的 JVM 实现,boolean[] 中每个元素占用一个字节(8-bits)

  5. Java 访问修饰符权限的区别;

  • public 所有类都可访问

  • protected 只允许包内、子类访问。

  • 默认 只允许包内访问

  • private 只允许类内访问

  1. String 是否可以继承, “+” 怎样实现?
  • String 是 final 类,不可继承。

  • + 是通过 StringBuilder(或 StringBuffer) 类,和 append 方法实现

  1. String,StringBuffer,StringBuilder,区别,项目中那里用到了 StringBuffer 或者 StringBuilder
  • String 不可变

  • StringBuffer,可变,线程安全

  • Stringbuilder,可变,线程不安全

  1. String为啥不可变,在内存中的具体形态?
  • String 使用 final char value[] 来存放字符序列。
  1. Comparable 接口和 Comparator 接口实现比较
  • Comparable 是直接在"被比较"的类内部来实现的

  • Comparator则是在被比较的类外部实现的

  1. Arrays 静态类如何实现排序的?
  • 双轴快排
  1. 首先检查数组长度,如果比阀值(286)小,直接使用双轴快排

  2. 否则先检查数组中数据的连续性,标记连续升序,反转连续降序,如果连续性好,使用 TimSort 算法(可以很好的利用数列中的原始顺序)

  3. 否则使用双轴快排 + 成对插入排序

  4. Java 中异常机制。

  • Java 中所有异常都是 Throwable 的子类,他的直接子类有两个,一个是 Error, 一个是 Exception

  • Error 一般表示 JVM 出现了严重问题,比如说栈溢出或 OOM,

  • Exception 中异常分为两类,

  • 一类是 RuntimeException 表示运行期间出现的错误,比较常见的是空指针异常和数组下标越界,出现这种异常一般是程序出现了逻辑错误,也就是代码有 Bug。

  • 另一类是编译时异常(除了 RuntimeException 以外的异常),常见的一般有 IOException等, 出现这种错误程序编译会不通过。

  • 还有一种分类方式是 checked exception 和 uncheck exceptionunchecked exception 包括 Error 和 RuntimeExcetionchecked exception 指之前所说的编译时异常。

  1. Java 中异常怎么处理,什么时候抛出,什么时候捕获;
  • 一般原则是提早抛出,延迟捕获

  • 出现异常时,若当前无法处理则抛,否则捕获异常,尝试恢复。

  1. 说一说对 java io 的理解
  • 按照使用的 IO 模型,大致可以分为三类:

  • BIO:JDK1.4 之前的阻塞 IO

  • NIO:JDK1.4 及以后的版本,非阻塞 IO

  • AIO:JDK1.7 之

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值