迎「面」而上,「职」赢未来 | 面试技巧总结(2)
2933
2023.04.10
发布于 未知归属地

image.png

点击标签栏里的 「暖春 Offer 计划」 标签或点击头图,可以进入完整专栏


还记得咱们上期提到的面试技巧,大家有没有在面试中灵活的用起来了呢?
需要补课的同学可以点击 👉🏻 传送门: 迎「面」而上,「职」赢未来 | 面试技巧总结(1)
本期咱们来重点讲解面试前需要准备好的各类知识,以及教大家如何看懂别人发的 “面经”。


😀 这是你吗?

据学习君了解,现阶段,不少扣友的面试经验还为 0。这好比还没顺利走出新手村,就要和面试官大 Boss 极限 solo 了。听上去的确是一局胜算渺茫的 battle,但也未必全然没有逆风翻盘的机会。

今天,我们就重点来讲讲技术面试。技术面试是每一位 IT 人都必定经历的一关!


💯 面试经验贴

案例一:

image.png

image.png

参考来源:https://leetcode.cn/circle/discuss/oKOqNk/


看到别人的一二三面经历,不知如何下手?

今天学习君教大家一个整理归纳的方法,可以把别人“宝贵的面经” 收为己用。

我们就拿案例一来举例吧~


🧡ྀི 第一步: 我们要绘制一个表格,把相同的知识点归类。

知识点知识点涉及内容知识点知识点涉及内容
Java 基础知识1.String 类型的存储方式,线程安全性以及字符串相加
2.StringBuffer 对象是否发生变化
3.Java 的值传递
4.final 类的概念
5.static 修饰符的用法
6.深拷贝和浅拷贝的区别
Java 集合类1.Map、Set、List 的概念和用途
2.HashMap 的存储结构
多线程编程1. 线程的创建方式、run 和 start 的区别
2. 线程池设计模式
3. 用户态和内核态的区别
4. volatile 和 synchronized 的区别
数据库相关1. MySQL 的 char 和 varchar 的区别
2. 行级锁和表级锁的概念,以及对项目的影响
3. 数据库索引的选取
网络通信1. TCP/IP 握手过程、重传相关知识
2. TCP 与 UDP 的区别、TCP 的可靠性保证、拥塞控制和流量控
3. 哈希冲突解决方案,优缺点
算法和数据结构1. 各种排序算法的方式和时间复杂度
2. 常用的数据结构,以及 Arraylist 和Linkedlist 的遍历效率
3. 大量文件里进行去重
软件工程1. 介绍自己做的项目,其中的技术点和难点,以及开发历程
2. 设计模式,主要问单例模式、观察者模式、工厂模式及抽象工厂模式。
其他1. 进程和线程的区别
2. 进程通信方式
3. Java 双亲委派机制和打破双亲委派。
4. 平时技术的学习方式,看什么书籍,接下来的学习方向

🧡ྀི 第二步: 我们去搜寻知识点的答案。

❔ String 类型的存储方式,线程安全性以及字符串相加❔ static 修饰符的用法
String 类型的存储方式:
Java 中的 String 类型是不可变的,即一旦创建,其值就不能被修改。String 类型底层是通过 char 数组来存储字符串的每个字符,而且 Java 采用的是 Unicode 编码,所以每个字符占用两个字节。
线程安全性:
String 类型是不可变的,因此在多线程环境下是线程安全的。这是因为多个线程同时读取 String 对象的值并不会对其造成影响,因为它的值是不可变的。
字符串相加:
在 Java 中,可以使用 + 运算符来将两个字符串拼接在一起。
static 是一个关键字,它可以用来修饰变量、方法和代码块。
1、修饰变量当 static 用来修饰一个变量时,这个变量就成为了静态变量,也叫类变量。这意味着该变量属于类而不是对象,它会被所有该类的对象所共享,并且只会在类加载时初始化一次,不会随着对象的创建而重新初始化。
2、修饰方法当 static 用来修饰一个方法时,这个方法就成为了静态方法。静态方法可以通过类名直接调用,无需创建对象。这是因为静态方法不依赖于任何对象,它只能访问类的静态成员和方法。
3、修饰代码块当 static 用来修饰一个代码块时,这个代码块就成为了静态代码块。静态代码块只会在类加载时执行一次,用于初始化类的静态成员。
❔ final 类的概念❔ StringBuffer 对象是否发生变化
在 Java 中,final 是一个关键字,它可以用来修饰类、方法和变量。
当 final 用来修饰一个类时,这个类就变成了一个不可继承的类,即不能再有子类继承这个类。这是因为 final 类被设计为具有完整性和不可变性,因此不能被修改或扩展。
StringBuffer 对象可以被修改。
StringBuffer 是一个可变的字符串缓冲区,可以通过它的方法在已有字符串的基础上进行增删改操作。
❔ 深拷贝和浅拷贝的区别❔ Java 的值传递
1、浅拷贝
浅拷贝是指在拷贝对象时,只拷贝对象本身及其内部存储的基本类型数据和对象引用,而不拷贝对象所引用的对象。也就是说,新旧对象中的引用变量指向的是同一个对象。
2、深拷贝
深拷贝是指在拷贝对象时,不仅拷贝对象本身及其内部存储的基本类型数据和对象引用,还要拷贝对象所引用的所有对象,即创建一个全新的对象。
在 Java 中,参数传递有两种方式:值传递和引用传递。
值传递是指传递的是实际值的副本,而不是实际值本身。当一个基本数据类型或一个对象引用作为参数传递给一个方法时,传递的是该变量的副本。在该方法内部对参数的任何改变都不会影响原来的变量。

🧡ྀི 第三步: 收集代码例子,加深理解。

知识点1:字符串相加

在 Java 中,可以使用 + 运算符来将两个字符串拼接在一起。例如:

javascriptCopy code
String str1 = "Hello";
String str2 = "World";
String result = str1 + " " + str2;

当使用 + 运算符连接多个字符串时,Java 会在内部创建一个新的 String 对象来存储结果。因为 String 对象是不可变的,所以每个新的连接操作都会创建一个新的对象。这可能会导致性能问题,因为创建和销毁对象需要额外的时间和内存。为了解决这个问题,可以使用 StringBuilder 或 StringBuffer 类来动态构建字符串,而不是使用 + 运算符。这些类允许修改已经存在的字符串对象,从而避免了创建大量的中间对象。其中,StringBuilder 是非线程安全的,而 StringBuffer 是线程安全的。


知识点2:StringBuffer 对象是否发生变化

StringBuffer 是一个可变的字符串缓冲区,可以通过它的方法在已有字符串的基础上进行增删改操作。

例如:

javaCopy code
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");

在这个例子中,使用 append() 方法将字符串 " World" 添加到了原有的字符串 "Hello" 的后面。这就改变了 StringBuffer 对象的值。

需要注意的是,StringBuffer 对象是线程安全的,因此其方法中大部分都使用了同步锁来保证线程安全。如果不需要线程安全的话,可以使用非线程安全的 StringBuilder 类来代替 StringBuffer。


知识点3:Java 的值传递

在 Java 中,参数传递有两种方式:值传递和引用传递。

值传递是指传递的是实际值的副本,而不是实际值本身。当一个基本数据类型或一个对象引用作为参数传递给一个方法时,传递的是该变量的副本。在该方法内部对参数的任何改变都不会影响原来的变量。

例如:

csharpCopy code
public class Example {
    public static void main(String[] args) {
        int x = 10;
        changeValue(x);
        System.out.println(x); // 输出结果是 10
    }

    public static void changeValue(int a) {
        a = 20;
    }
}

在这个例子中,我们定义了一个名为 changeValue 的方法,该方法接受一个 int 类型的参数 a。当我们在 main 方法中调用 changeValue(x) 时,Java 会将变量 x 的值复制到 a 中,然后将 a 传递给 changeValue 方法。在 changeValue 方法内部,我们将 a 的值更改为 20,但这并不会影响 x 的值,因为我们只是在修改 a 的副本,而不是 x 本身。

需要注意的是,当传递一个对象引用作为参数时,虽然传递的是该引用的副本,但是该副本仍然指向原来的对象。因此,在该方法内部对对象的任何更改都将影响原来的对象。


案例二:

image.png


💛ྀི 这篇总结提到的面试考点包括

  1. 自我介绍
  2. 之前做过的项目
  3. 产品设计、需求分析思维和方法
  4. 公司的产品、产品理念和情况
  5. 技术方面的面试
  6. 具体场景的设计需求和技术方案设计
  7. 基础的数据库技术
  8. 大胆表达自己的想法和技术方案交流的能力

💛ྀི 总结

  1. 自我介绍: 准备好自己的简历,介绍自己的个人情况和工作经历。
  2. 项目经验: 重点考察面试者过去的项目经验,包括自己的职责、工作时间、成果等。
  3. 技术知识: 考察面试者的技术能力和基础知识,可以涉及编程语言、算法、数据结构等方面。
  4. 产品设计: 对于产品岗位,会考察面试者对产品设计、需求分析的思维和方法。
  5. 沟通能力: 面试官会考察面试者的沟通能力,包括表达清晰、语言流利、思维敏捷等方面。
  6. 对公司和岗位的了解: 面试官也会问面试者对公司产品和岗位的了解,考察面试者的研究和了解能力。

面试经验贴汇总:

企业名称面经链接企业名称面经链接
字节跳动https://leetcode.cn/circle/discuss/MDq50z/美团https://leetcode.cn/circle/discuss/P7hf9c/
字节跳动https://leetcode.cn/circle/discuss/6h4KL9/美团https://leetcode.cn/circle/discuss/Tt24Uk/
字节跳动https://leetcode.cn/circle/discuss/0BtAeO/美团https://leetcode.cn/circle/discuss/kNsAFm/
华为https://leetcode.cn/circle/discuss/qYBO7F/微软https://leetcode.cn/circle/discuss/xZPKE3/
华为https://leetcode.cn/circle/discuss/eNm2zD/微软https://leetcode.cn/circle/discuss/xlGG0J/
华为https://leetcode.cn/circle/discuss/cpakC3/微软https://leetcode.cn/circle/discuss/DjUDEm/
腾讯https://leetcode.cn/circle/discuss/YizRCr/蔚来https://leetcode.cn/circle/discuss/oUv0dV/
腾讯https://leetcode.cn/circle/discuss/nU9fDI/蔚来https://leetcode.cn/circle/discuss/v6M7KP/

✋ 技术面试准备

🌾 面试八股

  1. 说明自己对该领域的掌握程度:在回答问题前,可以先简单介绍一下自己对该领域的了解程度和经验。
  2. 表达清晰简洁:在回答问题时,尽可能使用简洁明了的语言表达自己的想法,以免让面试官产生误解。
  3. 给出具体的例子:如果能用具体的例子来说明自己的观点,可以更加生动形象地回答问题,让面试官更容易理解。
  4. 确保理解问题:在回答问题前,可以向面试官确认自己是否理解了问题,以避免在回答中偏离了问题的本意。
  5. 展示自己的思考过程:在回答问题时,可以向面试官展示自己的思考过程,让面试官看到自己的分析能力和解决问题的能力。
  6. 注意:需要注意的是,在回答问题时,要避免使用八股式的回答方式,应该从自己的实际经验和知识出发,以及积极思考,回答出自己独特的见解和观点。
推荐学习资源推荐学习资源推荐学习资源
岗位八股推荐七天八股速记:后端image.png七天八股速记:前端image.png七天八股速记:算法image.png
岗位八股推荐数据库面试速通image.png前端面试突破:Vueimage.png算法面试小抄image.png
岗位八股推荐C++面试突破image.pngJava 面试突破image.png从 BUG 入手:Java 基础修炼image.png

🌾 面试手撕代码

  1. 保持冷静:首先要保持冷静,不要因为紧张而犯错或者无法思考。
  2. 明确要求:与面试官确认具体要求,例如需要实现哪些功能、使用哪种语言等。
  3. 分析问题:在开始编码之前,先仔细分析问题,确保自己理解了题目要求,明确编码目标。
  4. 展示思考过程:在编码过程中,可以适时地展示自己的思考过程,让面试官了解自己的分析能力和解决问题的能力。
  5. 注意代码风格:在编写代码时,要注意代码的格式和风格,使代码更加清晰易读。
  6. 交流沟通:如果在编码过程中遇到了问题,可以与面试官进行交流沟通,共同探讨解决方案。
  7. 注意:需要注意的是,在面试时,面试官可能更关注的是思考过程和解决问题的能力,而不是完美的代码实现。因此,要注重与面试官的沟通和交流,展示自己的分析能力和解决问题的能力,而不是只注重代码的实现。

🌾 面试项目

  1. 简要介绍项目:首先简要介绍项目的背景、目标、范围、时间和成员等基本信息,以让面试官对项目有一个整体的了解。
  2. 阐述自己的角色:接着阐述自己在项目中的具体角色和任务,包括负责的模块、完成的工作、解决的问题等。
  3. 讲述技术方案:详细讲述项目的技术方案,包括所采用的技术栈、开发工具、架构设计、流程等。
  4. 强调成果:重点强调自己在项目中所做出的贡献,例如开发的模块、优化的代码、提出的建议等,并指出这些贡献对于项目的意义和价值。
  5. 反思总结:对于项目中遇到的问题、困难和挑战,可以阐述自己的思考和总结,展示自己的解决问题的能力。
  6. 注意:需要注意的是,在回答项目问题时,要保持清晰简洁,不要涉及到过多的细节,同时要展示自己的思考能力和解决问题的能力。同时,要注意回答问题时的语言表达和态度,要自信、诚恳、真实和有说服力。

🌾 面试刷题技巧

1、审题

💡 审题时需要注重清楚以下内容

  • 审出每个条件(有几个条件,大概是什么)
  • 审出相应的考点和类型(方向正确了,你的路线才不会错)
  • 审出这类题/考点的易错点(出题人给你设的坑)

🎈 具体做法

  • 对有用信息做一些标记
  • 对最后一句进行思考:这道题考什么?
  • 有什么易错点吗?

2、思考

💡 思考时以下述内容为重点

  • 翻译条件
  • 与条件相关的知识点
  • 与其他条件和结论的联系
  • 其他方向的思考

🔎 培养结构性思维,学会先分类方法,再选择方法

  • 思考用结构化思维:先分类方法,再选择方法
  • 总结题目用来完善你的结构化:思考路线、方向、方法
  • 刷题验证你的结构化
  • 最终得到一类题型接近完美的结构化思维

◼️ 高效刷题通道 ◼️

眼下已是三月,正式进入面试高峰期。在此紧要关头,真题演练的目的必须明确。瞄准某一企业,或锚定某一岗位。清晰的题目归类将大幅提升你的刷题效率,达到事半功倍的效果。

学习君根据 企业 & 岗位 两大维度总结了以下刷题计划,大家可以按照自己的需求有针对性地进行训练喔 !

点击下方图片即可开始刷题 ~

1、8 大名企真题放送

2、 热门岗位真题集锦

综合提升企业真题企业真题企业真题企业真题
春招突围「数据库」image.png春招突围「后端岗」image.png兴业数金春招备战image.png大疆春招备战image.png字节春招备战image.png
百度春招备战image.pngbilibili 春招备战image.png小红书春招备战image.png美团春招备战image.png拼多多春招备战image.png

◻️ 面试真题集锦 ◻️

点击进入「求职」页,即可解锁海量企业真题 ~


📢 嗨嗨嗨【春招会员助力月】开启啦

春招如火如荼,力扣特为 PLUS 会员开启 『春招助力月』
PLUS 会员除尊享会员专属 LeetBook 外,还可享受其他学习资源的会员专属价。助力月已经开启,快快到力扣学习『学习板块』选取你最需的学习资源吧!


📔 内推专区

学习君已经为你准备好了众多内推渠道,点击心仪的公司进投递吧~

光大银行总行信息科技部https://leetcode.cn/circle/discuss/G5tAfd/
阿里巴巴闲鱼后端 Java 研发https://leetcode.cn/circle/discuss/mzWX03/
4399游戏多项岗位https://leetcode.cn/circle/discuss/dQcQ2I/
华为研发岗位https://leetcode.cn/circle/discuss/aPTKwl/
蚂蚁多项岗位https://leetcode.cn/circle/discuss/5QaCgs/
图森未来研发岗位https://leetcode.cn/circle/discuss/Qzmv9P/
快手研发团队https://leetcode.cn/circle/discuss/SHz1lq/
比亚迪数据分析https://leetcode.cn/circle/discuss/7kRs7O/
评论 (0)