哈啰出行Java后台开发一面面经【复盘】

电话面试,时间30分钟

自我介绍

介绍开源项目的时候,项目的亮点没有说,还有难点也可以说,难点有架构设计

使用的jdk版本,我说了jdk11和jdk1.8都有用

每一个jdk版本的新特性都需要了解到,如果问到jdk11的新特性,不会,很影响面试体验

我讲了jdk8中的lambda表达式,还有就是hashmap的不同,回答的很少

jdk8的新特性(没记住)

  1. 新增了lambda,使得写匿名函数更加的优雅,代码更简洁

  2. Stream流:处理集合更优雅,方便

  3. 在接口中新增了默认方法

    1. 向接口中添加默认方法,不会破坏接口的实现类,如果在jdk1.7,我们向接口中添加新的功能的时候,我们需要在实现类中重写这个方法

    2. 提供默认方法,能够减少实现类中的代码量,这些方法的功能都是相同的,如果某个实现类的功能不同,则重写该方法就行

    3. 因为实现类可以实现多个接口,如果多个接口中的都有相同的默认方法,就会出现菱形继承问题,因为该实现类,不知道使用哪个的接口的默认方法

      1. 类优先原则:如果一个类继承了另一个类,并且同时实现了一个或多个接口,那么在方法解析时,类的方法优先级高于接口的默认方法。

      2. 接口冲突原则:如果一个类实现了多个接口,而这些接口中有相同的默认方法,那么该类必须明确覆盖这个默认方法,提供自己的实现。

      解决菱形继承问题就是在继承类中重写默认方法,调用的时候,使用的是继承类的默认方法,而不是接口中的默认方法

  4. 函数式接口:接口中只包含一个抽象默认,有没有默认方法都不影响

  5. 日期和时间API(Date and Time API):JDK 1.8引入了一个新的日期和时间API,提供了更全面和灵活的处理日期和时间相关操作的方式。它包括了LocalDate、LocalTime、LocalDateTime和Period等类

    原来的Date等类存在的问题:

    1. Date类是可变的,会存在线程安全问题
    2. 不一致问题,Date的月份是从0开始,和日常的不一样
    3. Date中的很多Api都是过时的
    4. 缺乏时区支持:Date类没有明确的时区支持。这使得在处理跨时区的日期和时间时变得困难,并且容易导致错误。
  6. Nashorn JavaScript引擎:JDK 1.8用一个轻量级高性能的JavaScript引擎Nashorn替代了旧的Rhino JavaScript引擎。它允许你在Java应用程序中嵌入JavaScript代码并无缝执行。

    这个可以不用了解

  7. 方法引用:是Java 8引入的一种语法简写方式,用于直接引用现有方法或构造函数。它提供了一种更简洁、更可读的方式来表示某个方法作为函数式接口的实现。

    方法引用的语法形式为Class::methodName,或者instance::methodName,或者ClassName::new

    这个方法引用,也就是我们通过Class::methodName或者其他形式调用之后,返回一个java.util.function包下的对象,具体使用哪个类,看该methodName的返回值和参数决定

    public class Student {
        private static String name = "xcye";
        public static String getName() {
            return name;
        }
        public void printName() {
            System.out.println("print: " + name);
        }
        public Student(String name) {
            System.out.println("构造器: " + name);
        }
    }
    
    public static void main(String[] args) {
        // String name = Student::getName;
        Student student = new Student("asdf");
        Supplier<String> getNameMethod = Student::getName;
        System.out.println(getNameMethod.get());
    
        Consumer<Student> consumer = Student::printName;
        consumer.accept(new Student("asdf"));
    }
    

jdk1.7和1.8中的hashmap的区别

只讲到数据结构不同

还有哈希算法不同等

为何hashmap中的扩容是<<1

我回答的是获取元素更快,错误回答

回答这个问题,应该从hash这个点来回答,在对key进行哈希运算的算法为

static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

根据hash获取bucket的算法为hash & (length - 1)

讲一下hashmap的扩容步骤

我只讲了当数组容量到达临界线时,是如何扩容的,但是细节没有讲,当时也是忘记了

讲一下hashmap的put流程

讲了个大概,细节还需要再跑一下

ConcurrentHashMap的put流程

忘记细节,只记得获取数组下标是通过cas,key和value不能为null

这里可能会问一个为什么不能为null问题

其他的想不起来了

反问

  • 对我有什么建议么
  • 假如进去之后,会做什么业务(阿里巴巴的数据中台)

没有后续,到现在也没有通知,我之前是在官网投的,投了3个岗位,但是我去看状态还是正常,我后面好像又在老板直骗上投,感觉这个面试是老板直骗投的,而不是从官网投递的

引流:阿里巴巴,字节跳动,腾讯,抖音,Java校招

#我的失利项目复盘##java校招##哈啰出行校招#
全部评论
redis都问了啥呀?
1 回复 分享
发布于 2023-06-30 15:48 韩国
OC了嘛
点赞 回复 分享
发布于 2023-07-03 20:09 江苏
你好,请问挖项目吗
点赞 回复 分享
发布于 2023-07-03 14:14 陕西
在哪投的😋
点赞 回复 分享
发布于 2023-06-30 23:31 北京
多少K
点赞 回复 分享
发布于 2023-06-30 15:47 韩国

相关推荐

05-10 03:46
辽宁大学 Java
大半夜刷牛客,突然看到当年在哈啰带我的项目大哥当年发的春招帖,好家伙给我整破防了!原来大神也是从池子里泡出来的啊!那我也来唠唠自己秋招春招的过山车经历吧。去年七月从哈啰跑路,我直接打满鸡血备战秋招。八股文背得飞起,简历刚投出去就收到美团一面,给我膨胀得差点飘起来。结果现场直接被面试官教做人——问啥啥卡壳,对面憋笑憋得脸都红了。好家伙,三个志愿直接光速全挂!接着就跟中了邪似的:字节二面挂、拼多多二面挂、快手二面挂...最绝的是小红书B站米哈游这些,劳资简历关都没过啊淦!到十一月手里就剩个招银云创的内包offer,整个人emo到不行。缩在实验室复盘才发现自己多憨:项目经历只会用不会吹,学历又是个二本+211硕的尴尬组合,还非要死磕大厂核心岗,这不纯纯送人头嘛!认命准备去云创当咸鱼算了。结果十二月底突然被小米捞起来面试!当时激动得差点把红米手机供起来,结果面完发现人家就是年底冲KPI的...气得我当场给手机贴了张&amp;quot;下次一定买小米13ultra&amp;quot;的符。不过这次倒是让我觉醒了:能进面说明咱还有救啊!连夜推掉云创实习,寒假偷摸溜回学校闭关修炼。把项目从&amp;quot;Hello&nbsp;World&amp;quot;级别硬生生编改成&amp;quot;史诗级巨作&amp;quot;,春招再战美团,好家伙历史面评太惨烈,三个志愿秒挂得比秋招还快。不过这次运气开始玄学了:叮咚买菜泡池子泡到发臭,游酷盛世上来就考我汇编直接GG。最离谱的是好未来,一天三面跟坐了火箭似的,和面试官从JVM扯到周杰伦新专辑,第三天直接甩offer过来!正打算签了去,滴滴HR突然跳出来——泡了一个月的池子,居然因为前面大佬毁约,靠着我哈啰的垂直实习经历成功补位!现在想想真就离谱,秋招面了三十多家全凉透,最后居然是靠前司经历和别人的鸽子捡漏上岸。所以说找工作这事吧,努力到位了,剩下的真得看点缘分。
牛客创作赏金赛
点赞 评论 收藏
分享
评论
13
62
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务