华为暑期实习一面,不过如此!
能看得出来,华为的暑期实习相对其他互联网大厂来说还是比较简单的,问的问题也很中规中矩,比如说学校的课程、编程语言、技术栈,这些很好回答。
然后项目的话,也几乎不会刨根问底,只要回答的有模有样就速通了。剩下的就是等流程,华为的流程是出了名的慢,有的能拖半年之久,所以速通华为的同学也不要掉以轻心,该面试还是要继续面。
华为暑期实习面经
学过哪些课程,自己学了哪些语言和技术?
大学期间我学过的课程有计算机基础方面的数据结构与算法、操作系统、计算机网络、计算机组成原理和编译原理;软件开发方面有 Java 面向对象编程、数据库原理和应用、软件工程、Web 开发等。
这样我就可以作为创作者把自己在学习 Java 过程中的经验心得通过文章/教程的形式发布出来,同时读者还可以通过评论、点赞、收藏的形式和我进行互动。
项目介绍
除了我前面提到的技术派,我还做了一个轮子项目 MYDB,一个 Java 实现的简单数据库,部分原理参照了 MySQL、PostgreSQL 和 SQLite。
目前实现的功能有:
- 数据可靠性和数据恢复
- MVCC(多版本并发控制)
- 两种事务隔离级别(读提交和可重复读)
- 死锁处理
- 简单的表和字段管理
- 简单的 SQL 解析
- 基于 socket 的 Server 和 Client
这个过程让我对 InnoDB 存储引擎的事务隔离级别、MVCC 多版本并发控制和日志管理都有了深入的理解和思考。
介绍一下 TCP/IP 协议栈,举出具体的例子
TCP/IP 四层模型是互联网通信的核心,定义了一系列协议和标准,确保设备间可以可靠地进行数据传输。
①、应用层(Application Layer):直接面向用户和应用程序,提供各种网络服务。它包含了用于特定应用的协议和服务,如 HTTP(HyperText Transfer Protocol)、FTP(File Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)等。
示例:当在浏览器中输入一个 URL 并访问一个网页时,浏览器使用 HTTP 协议从 Web 服务器请求页面内容。
②、传输层(Transport Layer):提供端到端的通信服务,确保数据可靠传输。它负责分段数据、流量控制、错误检测和纠正。常见的传输层协议有 TCP 和 UDP。
示例:当发送一封电子邮件时,TCP 协议确保邮件从你的客户端可靠地传输到邮件服务器。
③、网际层:或者叫网络层(Internet Layer),负责在不同网络之间路由数据包,提供逻辑地址(IP 地址)和网络寻址功能。用于处理数据包的分组、转发和路由选择,确保数据可以从源端传输到目标端。
常见协议:IPv4、IPv6、ICMP(Internet Control Message Protocol)。
示例:当访问一个网站时,网络层协议(如 IPv4)将你的请求从你的计算机通过多个路由器传输到目标服务器。
④、网络接口层(Network Access Layer):或者叫链路层(Link Layer),负责将数字信号在物理通道(网线)中准确传输,定义了如何在单一网络链路上传输数据,如何处理数据帧的发送和接收,包括物理地址(MAC 地址)的解析。
常见协议:以太网(Ethernet)、Wi-Fi。
示例:在一个局域网(LAN)中,计算机通过以太网连接交换机,链路层协议负责数据帧在网络设备间的传输。
IP 协议
IP 协议(Internet Protocol)用于在计算机网络之间传输数据包,它定义了数据包的格式和处理规则,确保数据能够从一个设备传输到另一个设备,可能跨越多个中间网络设备(如路由器)。
IP 转发分组,路由选择
①、寻址:每个连接到网络的设备都有一个唯一的 IP 地址。IP 协议使用这些地址来标识数据包的源地址和目的地址,确保数据包能够准确地传输到目标设备。
②、路由:IP 协议负责决定数据包在网络传输中的路径。比如说路由器使用路由表和 IP 地址信息来确定数据包的最佳传输路径。
③、分片和重组:当数据包过大无法在某个网络上传输时,IP 协议会将数据包分成更小的片段进行传输。接收端会根据头部信息将这些片段重新组装成完整的数据包。
LeetCode 22 生成括号
class Solution {
List<String> combinations = new ArrayList<>();
// 主方法,调用此方法生成所有的括号组合
public List<String> generateParenthesis(int n) {
backtrack("", 0, 0, n);
return combinations;
}
// 回溯方法
private void backtrack(String current, int open, int close, int max) {
// 如果当前字符串长度等于最大长度的两倍,说明找到了一个解,添加到结果列表中
if (current.length() == max * 2) {
combinations.add(current);
return;
}
// 如果左括号数量小于 n,可以添加一个左括号
if (open < max) {
backtrack(current + "(", open + 1, close, max);
}
// 如果右括号数量小于左括号数量,可以添加一个右括号
if (close < open) {
backtrack(current + ")", open, close + 1, max);
}
}
}
内容来源
- 三分恶的面渣逆袭:javabetter.cn/sidebar/san…
- 二哥的 Java 进阶之路(GitHub 已有 12000+star):github.com/itwanger/to…
转载自:https://juejin.cn/post/7376197082204979209