比亚迪真的有担当,985废物硕也给offer了

沉默王二

共 6538字,需浏览 14分钟

 ·

2024-06-19 14:04

大家好,我是二哥呀。

牛客上刷到一条帖子,挺有代表性的,楼主说自己是个 985 废物硕,秋招和春招都一败涂地,目前只有一个比亚迪的 offer,虽然网上有很多声音都在劝退比亚迪,但自己还是决定去了,不想毕业后出现空窗期。

截图来自牛客的房子着火我拍照

这一看就是 24 届的同学,如果是我,这个时候比亚迪出手把我捞走,我会跪下磕三十个响头(😂)。

确实没必要把自己架在火堆上烤了,尤其是马上毕业的 24 届同学,先拿 offer 再说,网上哪家公司没有负面信息!

帖子的评论区也有牛友留言说,“比亚迪真的有担当,简单粗暴,甚至没有笔试,而且面试只有一轮,希望今年秋招依然能加大力度,这样自己最起码有个保底 offer”。

讲真,我对比亚迪的招聘力度一直挺欣赏的,不像互联网大厂难度那么高,对技术不是特别有天赋的同学来说,友好太多。

今天我们就以《Java 面试指南》中收录的《比亚迪面经同学 2》 技术面为例,来看看比亚迪的面试官都喜欢问哪些问题,好做到知彼知己百战不殆。

让天下所有的面渣都能逆袭 😁

能看得出来,比亚迪的面试题相对很多互联网大厂来说还是非常友好的,简直不要太简单,都是一些非常基础的 Java 后端四大件的题目,难度不大。

比亚迪面经

说说final关键字的作用

①、当 final 修饰一个类时,表明这个类不能被继承。比如,String 类、Integer 类和其他包装类都是用 final 修饰的。

二哥的 Java 进阶之路:final 修饰类

②、当 final 修饰一个方法时,表明这个方法不能被重写(Override)。也就是说,如果一个类继承了某个类,并且想要改变父类中被 final 修饰的方法的行为,是不被允许的。

③、当 final 修饰一个变量时,表明这个变量的值一旦被初始化就不能被修改。

如果是基本数据类型的变量,其数值一旦在初始化之后就不能更改;如果是引用类型的变量,在对其初始化之后就不能再让其指向另一个对象。

二哥的 Java 进阶之路:不能更改

但是引用指向的对象内容可以改变。

三分恶面渣逆袭:final修饰变量

基本数据类型有哪些

  • 数值型
    • 整数类型(byte、short、int、long)
    • 浮点类型(float、double)
  • 字符型(char)
  • 布尔型(boolean)

Java 基本数据类型的默认值和占用大小:

数据类型 默认值 大小
boolean false 1字节或 4 字节
char '\u0000' 2 字节
byte 0 1 字节
short 0 2 字节
int 0 4 字节
long 0L 8 字节
float 0.0f 4 字节
double 0.0 8 字节

说说String的常用方法

我自己常用的有:

  1. length() - 返回字符串的长度。
  2. charAt(int index) - 返回指定位置的字符。
  3. substring(int beginIndex, int endIndex) - 返回字符串的一个子串,从 beginIndexendIndex-1
  4. contains(CharSequence s) - 检查字符串是否包含指定的字符序列。
  5. equals(Object anotherObject) - 比较两个字符串的内容是否相等。
  6. indexOf(int ch)indexOf(String str) - 返回指定字符或字符串首次出现的位置。
  7. replace(char oldChar, char newChar)replace(CharSequence target, CharSequence replacement) - 替换字符串中的字符或字符序列。
  8. trim() - 去除字符串两端的空白字符。
  9. split(String regex) - 根据给定正则表达式的匹配拆分此字符串。

抽象类和普通类有什么区别

抽象类使用 abstract 关键字定义,不能被实例化,只能作为其他类的父类。普通类没有 abstract 关键字,可以直接实例化。

抽象类可以包含抽象方法和非抽象方法。抽象方法没有方法体,必须由子类实现。普通类智能包含非抽象方法。

说说 io 流

Java IO 流的划分可以根据多个维度进行,包括数据流的方向(输入或输出)、处理的数据单位(字节或字符)、流的功能以及流是否支持随机访问等。

按照数据流方向如何划分?

  • 输入流(Input Stream):从源(如文件、网络等)读取数据到程序。
  • 输出流(Output Stream):将数据从程序写出到目的地(如文件、网络、控制台等)。

按处理数据单位如何划分?

  • 字节流(Byte Streams):以字节为单位读写数据,主要用于处理二进制数据,如音频、图像文件等。
  • 字符流(Character Streams):以字符为单位读写数据,主要用于处理文本数据。
二哥的 Java 进阶之路

按功能如何划分?

  • 节点流(Node Streams):直接与数据源或目的地相连,如 FileInputStream、FileOutputStream。
  • 处理流(Processing Streams):对一个已存在的流进行包装,如缓冲流 BufferedInputStream、BufferedOutputStream。
  • 管道流(Piped Streams):用于线程之间的数据传输,如 PipedInputStream、PipedOutputStream。

说说 bio 和 nio 的区别

Java 提供了多种 IO 模型来处理输入和输出操作,包括传统的阻塞 IO、非阻塞 IO 和异步 IO。

二哥的 Java 进阶之路:IO 分类

BIO(Blocking I/O):采用阻塞式 I/O 模型,线程在执行 I/O 操作时被阻塞,无法处理其他任务,适用于连接数较少的场景。

NIO(New I/O 或 Non-blocking I/O):采用非阻塞 I/O 模型,线程在等待 I/O 时可执行其他任务,通过 Selector 监控多个 Channel 上的事件,适用于连接数多但连接时间短的场景。

Java 的集合框架有哪些?

Java 集合框架可以分为两条大的支线:

①、Collection,主要由 List、Set、Queue 组成:

  • List 代表有序、可重复的集合,典型代表就是封装了动态数组的 ArrayList 和封装了链表的 LinkedList;
  • Set 代表无序、不可重复的集合,典型代表就是 HashSet 和 TreeSet;
  • Queue 代表队列,典型代表就是双端队列 ArrayDeque,以及优先级队列 PriorityQueue。

②、Map,代表键值对的集合,典型代表就是 HashMap。

二哥的 Java 进阶之路:Java集合主要关系

HashMap 和 hashtable 的区别

在 Java 中,有 3 种线程安全的 Map 实现,最常用的是ConcurrentHashMap和Collections.synchronizedMap(Map)包装器。

Hashtable 也是线程安全的,但它的使用已经不再推荐使用,因为 ConcurrentHashMap 提供了更高的并发性和性能。

①、HashTable 是直接在方法上加 synchronized 关键字,比较粗暴。

二哥的 Java 进阶之路:HashTable

ArrayList 和 vector 的区别

Vector 属于 JDK 1.0 时期的遗留类,已不推荐使用,仍然保留着是因为 Java 希望向后兼容。

ArrayList 是在 JDK 1.2 时引入的,用于替代 Vector 作为主要的非同步动态数组实现。因为 Vector 所有的方法都使用 synchronized 关键字进行了同步,单线程环境下效率较低。

二哥的 Java 进阶之路:Vector源码

aop 在 Spring中的应用

AOP,也就是面向切面编程,是一种编程范式,旨在提高代码的模块化。比如说可以将日志记录、事务管理等分离出来,来提高代码的可重用性。

AOP 的核心概念包括切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)和织入(Weaving)等。

① 像日志打印、事务管理等都可以抽离为切面,可以声明在类的方法上。

② 在 Spring AOP 中,连接点总是表示方法的执行。

③ Spring AOP 支持五种类型的通知:前置通知、后置通知、环绕通知、异常通知、最终通知等。

④ 在 AOP 中,切点用于指定我们想要在哪些连接点上执行通知的规则。

⑤ 织入是指将切面应用到目标对象并创建新的代理对象的过程。Spring AOP 默认在运行时通过动态代理方式实现织入。

@Transactional 注解,就是一个典型的 AOP 应用,它就是通过 AOP 来实现事务管理的。我们只需要在方法上添加 @Transactional 注解,Spring 就会在方法执行前后添加事务管理的逻辑。

Redis 的数据类型有哪些

Redis 有五种基本数据类型,这五种数据类型分别是:string(字符串)、hash(哈希)、list(列表)、set(集合)、sorted set(有序集合,也叫 zset)。

三分恶面渣逆袭:Redis基本数据类型

set 和 zset 的区别

集合是字符串的无序集合,集合中的元素是唯一的,不允许重复。和 Java 集合框架中的 Set 有相似之处。

集合主要有以下两个使用场景:

  • 标签(tag)
  • 共同关注

Zset,有序集合,比 set 多了一个排序属性 score(分值)。

二哥的 Java 进阶之路

主要应用场景有:

  • 用户点赞统计
  • 用户排序

比如技术派实战项目中,我们就使用 Zset 来实现了用户月度活跃排行榜。

技术派用户活跃榜

内容来源

  • 星球嘉宾三分恶的面渣逆袭:https://javabetter.cn/sidebar/sanfene/nixi.html
  • 二哥的 Java 进阶之路(GitHub 已有 12000+star):https://javabetter.cn

ending

一个人可以走得很快,但一群人才能走得更远。二哥的编程星球已经有 5500 多名球友加入了,如果你也需要一个良好的学习环境,戳链接 🔗 加入我们吧。这是一个编程学习指南 + Java 项目实战 + LeetCode 刷题的私密圈子,你可以阅读星球专栏、向二哥提问、帮你制定学习计划、和球友一起打卡成长。

两个置顶帖「球友必看」和「知识图谱」里已经沉淀了非常多优质的学习资源,相信能帮助你走的更快、更稳、更远

欢迎点击左下角阅读原文了解二哥的编程星球,这可能是你学习求职路上最有含金量的一次点击。

最后,把二哥的座右铭送给大家:没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。共勉 💪。

浏览 9939
9点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
9点赞
评论
收藏
分享

手机扫一扫分享

分享
举报