├── README.md ├── 名企笔试真题 ├── ReadMe.md ├── 兆易创新嵌入式软件工程师笔试题目解析.md ├── 北京联发科嵌入式软件工程师笔试题目解析.md └── 小米嵌入式软件工程师笔试题目解析.md ├── 知识点总结 ├── ARM体系与架构.md ├── CandC++.md ├── Linux驱动.md ├── 勘误.md ├── 名企最新面试真题.md ├── 操作系统.md ├── 数据结构与算法分析.md └── 网络编程.md ├── 秋招面经总结 ├── oppo和海康嵌入式软件工程师面经分享.md ├── readme.md ├── 个人二维码-美化.png ├── 公众号二维码.png ├── 嵌入式软件工程师的秋招之路.md └── 联发科华为小米等20家公司面经总结.md └── 笔试面试技巧 ├── 如何写一份合格的简历.md ├── 如何在面试中介绍自己的项目经验.md ├── 微信群聊干货分享.md ├── 恭喜那些取得offer的同学.md └── 校招信息获取渠道.md /README.md: -------------------------------------------------------------------------------- 1 | - [嵌入式软件工程师笔试面试指南(EmbeddedSoftwareEngineerInterview)](#嵌入式软件工程师笔试面试指南embeddedsoftwareengineerinterview) 2 | - [嵌入式软件笔试面试知识点总结](#嵌入式软件笔试面试知识点总结) 3 | - [名企笔试真题](#名企笔试真题) 4 | - [面试技巧](#面试技巧) 5 | - [面经总结](#面经总结) 6 | - [PDF获取方式](#pdf获取方式) 7 | - [勘误](#勘误) 8 | - [赞赏](#赞赏) 9 | - [微信交流群干货分享](#微信交流群干货分享) 10 | - [榜上有名](#榜上有名) 11 | 12 | 13 | **申明:本资料部分内容转载自网络,请勿用于商业用途。如有侵权,请联系作者删除。** 14 | 15 | 作者在准备秋招的过程中,整理了一些资料,最后顺利拿到了**oppo,小米,海康威视,兆易创新,全志科技**等十余家公司的offer。现将这部分资料分享出来,希望能对大家有帮助! 16 | 17 | 如果大家在网上看到了不错的资料,或者在笔试面试中遇到了资料中没有的知识点,大家可以关注我的公众号联系我,及时反馈给我。资料如有错误或者不合适的地方,请及时联系作者。 18 | 19 | 20 | 21 | 整理不易,**希望大家能给个star支持下**,让我有继续更新下去的动力。 22 | 23 | # 哈喽,各位小伙伴好,应大家需求。我整理了一个面经模版,大家可以记录自己的秋招经历,在github上向我提交issues。我会把大家提交的issues同步到本仓库中,希望这个仓库可以帮助到更多的人!祝愿大家offer多多,钱多多,跳槽薪资double! 24 | 25 | [issues提交模版](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/readme.md) 26 | 27 | 28 | # 非常抱歉,本仓库不再提供md源文件!PDF格式的文件放在了公众号,大家可以去公众号领取。 29 | ![图片](https://user-images.githubusercontent.com/45563242/117952196-8330de80-b347-11eb-8d3b-4344cb5f7f9d.png) 30 | 31 | 32 | 33 | # 嵌入式软件工程师笔试面试指南(EmbeddedSoftwareEngineerInterview) 34 | 35 | [![alt text](https://img.shields.io/badge/%E5%85%AC%E4%BC%97%E5%8F%B7-%E5%B5%8C%E5%85%A5%E5%BC%8F%E4%B8%8ELinux%E9%82%A3%E4%BA%9B%E4%BA%8B-blue)](#pdf获取方式)[![alt text](https://img.shields.io/badge/CSDN-%E5%B5%8C%E5%85%A5%E5%BC%8F%E4%B8%8ELinux%E9%82%A3%E4%BA%9B%E4%BA%8B-lightgrey)](https://blog.csdn.net/qq_16933601?spm=1000.2115.3001.5343)[![alt text](https://img.shields.io/badge/%E5%8D%9A%E5%AE%A2%E5%9B%AD-%E5%B5%8C%E5%85%A5%E5%BC%8F%E4%B8%8ELinux%E9%82%A3%E4%BA%9B%E4%BA%8B-red)](https://www.cnblogs.com/dongxb/)[![alt text](https://img.shields.io/badge/%E7%9F%A5%E4%B9%8E-%E4%BB%B2%E4%B8%80-orange)](https://www.zhihu.com/people/simple-95-72)[![alt text](https://img.shields.io/badge/%E7%89%9B%E5%AE%A2-%E5%B5%8C%E5%85%A5%E5%BC%8F%E4%B8%8ELinux%E9%82%A3%E4%BA%9B%E4%BA%8B-green)](https://www.nowcoder.com/profile/913155792)[![alt text](https://img.shields.io/badge/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80-%E7%A1%AC%E6%A0%B8%E5%A5%BD%E6%96%87-yellow)](https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz=Mzg5ODUxNDMxMA==&scene=23&album_id=1697392020677312514&count=3#wechat_redirect)[![alt text](https://img.shields.io/badge/PDF%E6%96%87%E6%A1%A3-%E5%85%8D%E8%B4%B9%E8%8E%B7%E5%8F%96-brightgreen)](#pdf获取方式) 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | ## 嵌入式软件笔试面试知识点总结 46 | 47 | [C/C++](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%9F%A5%E8%AF%86%E7%82%B9%E6%80%BB%E7%BB%93/CandC%2B%2B.md) 48 | 49 | [数据结构与算法分析](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%9F%A5%E8%AF%86%E7%82%B9%E6%80%BB%E7%BB%93/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E5%88%86%E6%9E%90.md) 50 | 51 | [ARM体系与架构](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%9F%A5%E8%AF%86%E7%82%B9%E6%80%BB%E7%BB%93/ARM%E4%BD%93%E7%B3%BB%E4%B8%8E%E6%9E%B6%E6%9E%84.md) 52 | 53 | [Linux驱动](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%9F%A5%E8%AF%86%E7%82%B9%E6%80%BB%E7%BB%93/Linux%E9%A9%B1%E5%8A%A8.md) 54 | 55 | [操作系统](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%9F%A5%E8%AF%86%E7%82%B9%E6%80%BB%E7%BB%93/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md) 56 | 57 | [网络编程](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%9F%A5%E8%AF%86%E7%82%B9%E6%80%BB%E7%BB%93/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B.md) 58 | 59 | ## 名企笔试真题 60 | 61 | [小米](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E5%90%8D%E4%BC%81%E7%AC%94%E8%AF%95%E7%9C%9F%E9%A2%98/%E5%B0%8F%E7%B1%B3%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B%E5%B8%88%E7%AC%94%E8%AF%95%E9%A2%98%E7%9B%AE%E8%A7%A3%E6%9E%90.md) 62 | 63 | [联发科](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E5%90%8D%E4%BC%81%E7%AC%94%E8%AF%95%E7%9C%9F%E9%A2%98/%E5%8C%97%E4%BA%AC%E8%81%94%E5%8F%91%E7%A7%91%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B%E5%B8%88%E7%AC%94%E8%AF%95%E9%A2%98%E7%9B%AE%E8%A7%A3%E6%9E%90.md) 64 | 65 | [兆易创新](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E5%90%8D%E4%BC%81%E7%AC%94%E8%AF%95%E7%9C%9F%E9%A2%98/%E5%85%86%E6%98%93%E5%88%9B%E6%96%B0%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B%E5%B8%88%E7%AC%94%E8%AF%95%E9%A2%98%E7%9B%AE%E8%A7%A3%E6%9E%90.md) 66 | 67 | ## 面试技巧 68 | 69 | [如何获取就业信息](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%AC%94%E8%AF%95%E9%9D%A2%E8%AF%95%E6%8A%80%E5%B7%A7/%E6%A0%A1%E6%8B%9B%E4%BF%A1%E6%81%AF%E8%8E%B7%E5%8F%96%E6%B8%A0%E9%81%93.md) 70 | 71 | [如何在面试中介绍自己的项目经验](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%AC%94%E8%AF%95%E9%9D%A2%E8%AF%95%E6%8A%80%E5%B7%A7/%E5%A6%82%E4%BD%95%E5%9C%A8%E9%9D%A2%E8%AF%95%E4%B8%AD%E4%BB%8B%E7%BB%8D%E8%87%AA%E5%B7%B1%E7%9A%84%E9%A1%B9%E7%9B%AE%E7%BB%8F%E9%AA%8C.md) 72 | 73 | [程序员如何写一份合格的简历](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%AC%94%E8%AF%95%E9%9D%A2%E8%AF%95%E6%8A%80%E5%B7%A7/%E5%A6%82%E4%BD%95%E5%86%99%E4%B8%80%E4%BB%BD%E5%90%88%E6%A0%BC%E7%9A%84%E7%AE%80%E5%8E%86.md) 74 | 75 | ## 面经总结 76 | [嵌入式软件工程师的秋招之路](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B%E5%B8%88%E7%9A%84%E7%A7%8B%E6%8B%9B%E4%B9%8B%E8%B7%AF.md) 77 | 78 | [嵌入式软件工程师面试经验总结](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/%E8%81%94%E5%8F%91%E7%A7%91%E5%8D%8E%E4%B8%BA%E5%B0%8F%E7%B1%B3%E7%AD%8920%E5%AE%B6%E5%85%AC%E5%8F%B8%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93.md) 79 | 80 | [oppo和海康嵌入式软件工程师面经总结](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/oppo%E5%92%8C%E6%B5%B7%E5%BA%B7%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B%E5%B8%88%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB.md) 81 | ## PDF获取方式 82 | 83 | 加我微信【LinuxDriverDev】,发送【资料群】后自动拉进学习资料群。 84 | 85 | ![](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/%E4%B8%AA%E4%BA%BA%E4%BA%8C%E7%BB%B4%E7%A0%81-%E7%BE%8E%E5%8C%96.png) 86 | 87 | 关注公众号【嵌入式与Linux那些事】,回复【offer】即可**获取最新版**。 88 | 89 | ![](https://github.com/ZhongYi-LinuxDriverDev/Picture/blob/main/Wechat/%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.png) 90 | 91 | # 勘误 92 | 93 | [勘误](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%9F%A5%E8%AF%86%E7%82%B9%E6%80%BB%E7%BB%93/%E5%8B%98%E8%AF%AF.md) 94 | 95 | 96 | 97 | # 赞赏 98 | 99 | 创作不易,如果觉得这些资料对你有帮助,那就可以赞赏**一块钱**给我,金额不重要,**我想看到你的头像出现在我列表里**。 100 | 101 | 最后,祝愿各位老板,钱多多,offer多多,跳槽薪资double! 102 | 103 | ![](https://github.com/ZhongYi-LinuxDriverDev/Picture/blob/main/Wechat/%E5%BE%AE%E4%BF%A1%E6%94%B6%E6%AC%BE%E7%A0%81.png) 104 | 105 | ![](https://github.com/ZhongYi-LinuxDriverDev/Picture/blob/main/Wechat/%E6%94%AF%E4%BB%98%E5%AE%9D%E6%94%B6%E6%AC%BE%E7%A0%81.png) 106 | 107 | 108 | # 微信交流群干货分享 109 | 110 | [日常群聊分享(持续更新中~)](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%AC%94%E8%AF%95%E9%9D%A2%E8%AF%95%E6%8A%80%E5%B7%A7/%E5%BE%AE%E4%BF%A1%E7%BE%A4%E8%81%8A%E5%B9%B2%E8%B4%A7%E5%88%86%E4%BA%AB.md#%E6%89%AB%E7%A0%81%E5%8A%A0%E6%88%91%E5%BE%AE%E4%BF%A1) 111 | 112 | # 榜上有名 113 | 114 | [恭喜那些取得offer的同学](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%AC%94%E8%AF%95%E9%9D%A2%E8%AF%95%E6%8A%80%E5%B7%A7/%E6%81%AD%E5%96%9C%E9%82%A3%E4%BA%9B%E5%8F%96%E5%BE%97offer%E7%9A%84%E5%90%8C%E5%AD%A6.md) 115 | -------------------------------------------------------------------------------- /名企笔试真题/ReadMe.md: -------------------------------------------------------------------------------- 1 | ## 主要分享名企笔试真题解析 2 | -------------------------------------------------------------------------------- /名企笔试真题/兆易创新嵌入式软件工程师笔试题目解析.md: -------------------------------------------------------------------------------- 1 | >哈喽,大家好。今天分享的是兆易创新的嵌入式软件开发工程师的笔试题目。这份题目中等难度,考察基础知识的偏多,最后的编程题只考了一个结构体数组的初始化。所以,在准备校招时,将重点还是要放在基础知识上。下面看下这份题目你可以答几分? 2 | 3 | [TOC] 4 | 5 | ## 单选题 6 | 7 | **1.Linux中使用 mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是()** 8 | 9 | A -m 10 | 11 | B -d 12 | 13 | C -f 14 | 15 | D -p 16 | 17 | > D 18 | > 19 | > mkdir [选项] [目录] 20 | > 21 | > -m --mode=模式,建立目录的时候同时设置目录的权限。 22 | > 23 | > -p --parents 若所建立的上层目录目前尚未建立,则会一并建立上层目录。 24 | > 25 | > -v --verbose 每次创建新目录都显示信息。 26 | > 27 | > -h --help 帮助信息。 28 | 29 | **2.下面代码创建了多少个进程(不包含main进程本身)()** 30 | 31 | ```c 32 | int main(int argc,char* argv[]) 33 | { 34 | fork(); 35 | fork() && fork() || fork(); 36 | fork(); 37 | } 38 | ``` 39 | 40 | A 19 41 | 42 | B 30 43 | 44 | C 24 45 | 46 | D 29 47 | 48 | > A 49 | > 50 | > 这道题主要考了两个知识点,一是逻辑运算符运行的特点;二是对fork的理解。 51 | > 52 | > 如果有一个这样的表达式:cond1 && cond2 || cond3 这句代码会怎样执行呢? 53 | > 54 | > 1、cond1为假,那就不判断cond2了,接着判断cond3。 55 | > 56 | > 2、cond1为真,这又要分为两种情况: 57 | > 58 | > ​ 2.1 cond2为真,这就不需要判断cond3了。 59 | > 60 | > ​ 2.2 cond2为假,那还得判断cond3。 61 | > 62 | > fork调用的一个奇妙之处在于它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 63 | > 64 | > 1、在父进程中,fork返回新创建子进程的进程ID。 65 | > 66 | > 2、在子进程中,fork返回0。 67 | > 68 | > 3、如果出现错误,fork返回一个负值(题干中说明了不用考虑这种情况)。 69 | > 70 | > 在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。 71 | > 72 | > 73 | > 有了上面的知识之后,下面我们来分析fork() && fork() || fork()会创建几个新进程。 74 | > 75 | > ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88/fork%E4%BE%8B%E9%A2%98%E5%9B%BE%E8%A7%A3.png) 76 | > 77 | > 很明显fork() && fork() || fork()创建了4个新进程。 78 | > 79 | > 总结: 80 | > 81 | > 第一行fork生成1个新进程。 82 | > 83 | > 第二行的三个fork生成4+4=8个新进程。 84 | > 85 | > 第三行的fork会生成10个新进程(这是因为前面总共有10个进程,调用一次fork生成10个新进程。 86 | > 87 | > 所以一共会生成1+8+10=19个新进程。 88 | 89 | **3.如果下列公式成立:3A*124=446C。则采用的是()进制** 90 | 91 | A 11 92 | 93 | B 12 94 | 95 | C 14 96 | 97 | D 16 98 | 99 | > C 100 | > 101 | > 看个位。最后的结果446C个位为C,因此,A,B可以排除。 102 | > 103 | > 假设为14进制,(A * 4 )%14= 12,结果正好为C。因此,答案为14进制。 104 | 105 | **4.下面关于字符数组的初始化,那个是正确的?()** 106 | 107 | A `char b[2][3] ={"d","e","f"};` 108 | 109 | B `char b[2][3] ={"d","e"};` 110 | 111 | C`char b[2][3] ={{"d","e","f"},{"a","b","c"}};` 112 | 113 | D`char b[2] ={"d","e"};` 114 | 115 | > B 116 | > 117 | > 通常情况下,二维数组的每一行分别使用一个字符串进行初始化。 例如: 118 | > 119 | > `char c[3] [8]={{"apple"},{"orange"},{"banana"}};` 120 | > 121 | > 等价于: 122 | > 123 | > `char c[3][8]={"apple","orange","banana"};` 124 | > 125 | > A:应改为`char b[3][2] ={"d","e","f"};` 126 | > 127 | > C:应改为`char b[2][3][2] ={{"d","e","f"},{"a","b","c"}};` 128 | > 129 | > D:应改为 `char b[2][2]={"d","e"};` 130 | 131 | **5.在32位系统中,下列类型占用8个字节的为()** 132 | 133 | A int 134 | 135 | B unsigned long long 136 | 137 | C char 138 | 139 | D short int 140 | 141 | > B 142 | > 143 | > 32位操作系统 144 | > 145 | > int:4字节 146 | > 147 | > unsigned long long:8字节 148 | > 149 | > char :1字节 150 | > 151 | > short int:2字节 152 | > 153 | > 注意和64位操作系统的区别:64位系统中,指针变量和long以及unsigned long 都占8个字节,其他的和32位系统一样 154 | 155 | ## 简答 156 | 157 | **1.** 158 | 159 | ```c 160 | int a[6] = {1,2,3,4,5,6}; 161 | printf("%d\n",*((int*)(&a+1)-1)); 162 | ``` 163 | 164 | **那么打印结果是什么?** 165 | 166 | > 6。 167 | > 168 | > 将 `*((int*)(&a+1)-1))`化简为:`*(p-1) `和 `p=(int*)(&a+1)` 169 | > 170 | > `&a`是一个指向`int(*)[6]`的指针。由于`&a`是一个指针,那么在32位机器上, `sizeof(&a)=4`,但是**&a+1的值取决于&a指向的类型**,由于`&a`指向 171 | > 172 | > `int(*)[6]`,所以`&a+1 = &a + sizeof(int(*)[6])=&a+24`。`&a`是数组的首地址,由此`&a+1`表示a向后移动了**6个int**从而指向a[6](越界),所以p指向的是a[6]。 173 | > 174 | > 由于p是`int *` 类型,那么`p-1`就指向a[5],所以 `*(p-1)=a[5]=6。` 175 | 176 | **2.请写出常量指针和指针常量的代码形式,并简述他们的区别** 177 | 178 | > `int const *p1;`const 在前,定义为常量指针 179 | > 180 | > `int *const p2;` * 在前,定义为指针常量 181 | > 182 | > 常量指针p1:指向的地址可以变,但内容不可以重新赋值,内容的改变只能通过修改地址指向后变换。 183 | > 184 | > 指针常量p2:指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一生。 185 | 186 | **3.如何避免头文件被重复包含** 187 | 188 | > 1. 条件编译: 189 | > 190 | > ```c 191 | > #ifndef _HEADERNAME_H 192 | > #define _HEADERNAME_H 193 | > 194 | > 195 | > ...//(头文件内容) 196 | > 197 | > 198 | > #endif 199 | > ``` 200 | > 201 | > 2. #pragma once 202 | > 203 | > 指定当前文件在构建时只被包含(或打开)一次,这样就可以减少构建的时间,因为加入#pragma once后,编译器在打开或读取第一个#include 模块后,就 204 | > 205 | > 不会再打开或读取随后出现的相同#include模块。 206 | 207 | **4.运行char name[] = "/dev/spdev"后,系统会分配几块内存,这些内存共占多少个字节?** 208 | 209 | > 11字节。 210 | > 211 | > 字符串最后以`\0`结尾,共占据11字节。 212 | 213 | **5.如下代码,请设计宏定义STR(x),将USART_RATE转换成字符串并打印出来** 214 | 215 | ```c 216 | #define USART_RATE 115200 217 | #define STR(x)____? 218 | printf("usart rate = %s\n",STR(USART_RATE)); 219 | ``` 220 | 221 | > `#define STR(x) #x` 222 | > 223 | > #:会把参数转换为字符串 224 | 225 | **6.已知结构体成员d的地址为p1,请获取成员变量b的地址。** 226 | 227 | ```c 228 | struct data{ 229 | int a; 230 | char b; 231 | short c; 232 | short d; 233 | int e; 234 | }; 235 | ``` 236 | 237 | > `p1 - 4 * sizeof(p1)` 238 | > 239 | > 结构体中成员变量在内存中存储的其实是**偏移地址**。也就是说**结构体的首地址+成员变量的偏移地址 = 结构体成员变量的起始地址**。具体如下图所示。 240 | > 241 | > ![结构体在内存中的存储](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88/%E7%BB%93%E6%9E%84%E4%BD%93%E5%9C%A8%E5%86%85%E5%AD%98%E4%B8%AD%E5%AD%98%E5%82%A8%E5%81%8F%E7%A7%BB.png) 242 | > 243 | > 因此,将指针p1向上移动4个单位即可。即`p1-4 * sizeof(p1)` 244 | 245 | **7.请写出下列代码的输出结果** 246 | 247 | ```c 248 | int main(int argc,char *argv[]) 249 | { 250 | char *buff[] ={"char","int","double"}; 251 | printf("%c\n",*(buff+1)[1]); 252 | return 0; 253 | } 254 | ``` 255 | 256 | > d 257 | > 258 | > buff是指针数组 ,一个3个元素的数组,数组里面是个字符串指针,这里执行buff+1时,则buff指向下一个数组元素,即int。 259 | > 260 | > 因此,`*(buff+1)[0]`指向int的地址,`*(buff+1)[1]` 指向double的地址,而最后是输出一个字符。所以,输出d。 261 | 262 | **8.下面的代码输出什么?为什么?** 263 | 264 | ```c 265 | void foo(void) 266 | { 267 | unsigned int a = 6; 268 | int b = -20; 269 | (a+b>6)?puts(">6"):puts("<=6"); 270 | } 271 | ``` 272 | 273 | > `>6` 274 | > 275 | > C中运算有规定,如果整型变量间进行数据运算,只要有一个变量是无符号的,结果就按无符号数据输出,因此a+b > a 276 | > 结果会输出 >6 277 | 278 | ## 编程题 279 | 280 | **表一:人员信息表:(info_table)** 281 | 282 | | 序号(num) | 姓名(name) | 性别(gender) | 年龄(age) | 283 | | :---------: | :-----------: | :------------: | :---------: | 284 | | 0 | 张三(Bob) | 男(man) | 60 | 285 | | 1 | 李四(Chris) | 男(man) | 30 | 286 | | 2 | 小红(Colin) | 女(woman) | 56 | 287 | 288 | **表二:人员职业表:(work_table)** 289 | 290 | | 序号(num) | 姓名(name) | 职业(work) | 等级(level) | 291 | | :---------: | :-----------: | :--------------: | :-----------: | 292 | | 0 | 张三(Bob) | 司机(driver) | 9 | 293 | | 1 | 李四(Chris) | 厨师(chief) | 3 | 294 | | 2 | 小红(Colin) | 幼师(teachers) | 6 | 295 | 296 | **表三:技能成绩表:(grade_table)** 297 | 298 | | 序号(num) | 姓名(name) | 技能(skill) | 成绩(grade) | 299 | | :---------: | :-----------: | :--------------: | :-----------: | 300 | | 0 | 张三(Bob) | 开车(drive) | 50 | 301 | | 1 | 李四(Chris) | 烹饪(cook) | 64 | 302 | | 2 | 小红(Colin) | 教学(teaching) | 55 | 303 | 304 | **如上所示有人员-职业-成绩的三个关系表** 305 | 306 | **请尝试** 307 | 308 | **1.使用结构体表示三个表格。** 309 | 310 | **2.设计一个函数来依次录入人员信息** 311 | 312 | **如add_personnel(info_table,work_table,grade_table);** 313 | 314 | ```c 315 | /* 316 | * @Description: 兆易创新编程题 317 | * @Version: 318 | * @Autor: 公众号【嵌入式与Linux那些事】 319 | * @Date: 2021-04-03 21:46:16 320 | * @LastEditors: 公众号【嵌入式与Linux那些事】 321 | * @LastEditTime: 2021-04-03 22:03:38 322 | */ 323 | #include 324 | //人员信息表 325 | typedef struct info_table{ 326 | char name[6]; 327 | char gender[5]; 328 | int age; 329 | }INFO; 330 | //人员职业表 331 | typedef struct work_table{ 332 | char name[6]; 333 | char work[10]; 334 | int level; 335 | }WORK; 336 | //技能成绩表 337 | typedef struct grade_table{ 338 | char name[6]; 339 | char skill[10]; 340 | int grade; 341 | }GRADE; 342 | /** 343 | * @Description: 依次录入人员信息 344 | * @param {INFO} *pinfo 345 | * @param {WORK} *pwork 346 | * @param {GRADE} *pgrade 347 | * @Return: 无 348 | * @Author: 公众号【嵌入式与Linux那些事】 349 | */ 350 | void add_personnel(INFO *pinfo,WORK *pwork,GRADE *pgrade){ 351 | int i; 352 | for(i = 0;i < 3;i++){ 353 | printf("请依次输入第%d个人的信息:姓名,性别,年龄\n",i+1); 354 | scanf("%s%s%d",pinfo[i].name,pinfo[i].gender,&pinfo[i].age); 355 | printf("%s,%s,%d\n",pinfo[i].name,pinfo[i].gender,pinfo[i].age); 356 | } 357 | for(i = 0;i < 3;i++){ 358 | printf("请依次输入第%d个人的信息:姓名,职业,等级\n",i+1); 359 | scanf("%s%s%d",pwork[i].name,pwork[i].work,&pwork[i].level); 360 | printf("%s,%s,%d\n",pwork[i].name,pwork[i].work,pwork[i].level); 361 | } 362 | for(i = 0;i < 3;i++){ 363 | printf("请依次输入第%d个人的信息:姓名,技能,成绩\n",i+1); 364 | scanf("%s%s%d",pgrade[i].name,pgrade[i].skill,&pgrade[i].grade); 365 | printf("%s,%s,%d\n",pgrade[i].name,pgrade[i].skill,pgrade[i].grade); 366 | } 367 | } 368 | int main() 369 | { 370 | INFO info_array[3]; 371 | WORK work_array[3]; 372 | GRADE grade_array[3]; 373 | add_personnel(info_array,work_array,grade_array); 374 | return 0; 375 | } 376 | ``` 377 | 378 | 今天的题目就分享到这里,关于题目,有任何疑问都可以私信我。下一篇文章,将会分享大厂的笔试题目解析。 379 | 380 | 381 | 382 | 383 | 384 | 往期精彩 385 | 386 | [9个提高代码运行效率的小技巧你知道几个?](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247484631&idx=1&sn=cfc2c6aa45c1f10faa8ca1adddf91fb5&chksm=c060283ef717a1285b56534054b983cbb6e212a55f491adf7df61b38294e4f553c5176d6a80d&token=99728457&lang=zh_CN#rd) 387 | 388 | [24张图7000字详解计算机中的高速缓存](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247484470&idx=1&sn=98f80777cd8500885da981516213bf7f&chksm=c06028dff717a1c9ea56ae26e9e3352e0dcb82ffdc37711e396df33781605c0eb0b757e270de&token=99728457&lang=zh_CN#rd) 389 | 390 | [面试官不讲武德,居然让我讲讲蠕虫和金丝雀!](http://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247484932&idx=1&sn=56a8cd2f4af474b8908d05ec1643cf69&chksm=c0602aedf717a3fb866edae088e77c161d1b39d503d695b14bb6c8fc6fd28b4cd6ea7d4811bd&mpshare=1&scene=23&srcid=0307LtWpQMqiGTlc6EgUtNk3&sharer_sharetime=1615106866041&sharer_shareid=04d13239c5be2ec55929ede9a8956f27#rd) 391 | 392 | [分析下B(BL)/LDR指令](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247485061&idx=1&sn=753e18bf7cbb2caa2c8940a15293f475&chksm=c0602a6cf717a37a91ac526be089b5c5f281fefb4c33a489ea57ea7d49c36c4803da6c28a492&token=669353782&lang=zh_CN#rd) 393 | 394 | 395 | 396 | 扫描下方二维码,加我微信进技术交流群。 397 | 398 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E4%B8%89%E6%9C%88/20210323231124.png) 399 | -------------------------------------------------------------------------------- /名企笔试真题/北京联发科嵌入式软件工程师笔试题目解析.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## 逻辑题 4 | 5 | #### 1. 参加断型冠状病毒疫苗开发研讨会的70名学者中,亚商学者39人,博士33人,非亚裔学者中无博士学位的4人,根据以上陈述,参加此次研讨会的亚裔博士有几人? 6 | 7 | A 1 8 | 9 | B 2 10 | 11 | C 6 12 | 13 | D 7 14 | 15 | E 8 16 | 17 | > C 18 | > 19 | > 亚裔学者39人,博士33人,非亚裔学者中无博士学位4人,这三者加起来是76人,但实际总人数只有70人。亚裔学者和博士两个概念之间为交叉关系,这两个概念和非亚裔学者中无博士学位者之间都是全异关系。这说明,既是亚裔学者又是博士即亚裔博士有6人。 20 | > 21 | > 也可以通过运用计算法来求解。设亚裔博士有x人,则可列方程:31+33-x+4=70,解这个方程,可得:x=6。 22 | 23 | #### 2. 某省妇女儿童占全省总人口的2/3。如果妇女是指所有女性人口,儿童是指所有非成年人口,并且对任一年龄段,该省男女人口的数量持平,则上述断定能推出以下哪项结论? 24 | 25 | A 该省男性成年人口和儿童人口持平。 26 | 27 | B 该省男性成年人口大于儿童人口。 28 | 29 | C 该省男性成年人口小于儿童人口。 30 | 31 | D 该省女性成年人口和男性儿童人口持平 32 | 33 | E 该省男性成年人口和女性儿童人口持平。 34 | 35 | > A 36 | > 37 | > 由题干,可以给出以下表 38 | > 39 | > | | 女性 | 男性 | | 40 | > | ---- | ---- | ---- | ---- | 41 | > | 成年 | 1/3 | 1/3 | 2/3 | 42 | > | 儿童 | 1/6 | 1/6 | 1/3 | 43 | > | | 1/2 | 1/2 | | 44 | > 45 | > 由任一年龄段,该省男女人口的数量持平,可得总人口男女持平。 46 | > 47 | > 由妇女儿童占全省总人口的三分之二,可得成年男性占三分之一。 48 | > 49 | > 由成年男性占三分之一,得男童占六分之一(因为男性占二分之一)。 50 | > 51 | > 由男童占六分之一,得女童占六分之一。因此,该省男性成年人口和儿童人口持平。 52 | 53 | #### 3. 某次讨论会共有25名与会者,已知(1)至少有7名青年教师是男性,(2)至少有8名男教师已过中年(3)至少有10名男青年是教师;如上述3句话两真一假,则关于与会人员可以得出以下哪项 54 | A 青年教师至少有10名 55 | 56 | B 男教师至多有15名 57 | 58 | C 男青年都是教师 59 | 60 | D 男青年至少有7名 61 | 62 | > D 63 | > 64 | > [1]:大于等于7名青男 [2]:大于等于8名中男[3]:大于等于10名青男。 65 | > 66 | > [1]与[3]数量上有重叠部分,如果[3]为真,则[1]一定为真; 67 | > 68 | > 如果[1]为假,则[3]一定为假。此时就会两个为假,与题干条件的两真一假相矛盾,故[1]必真。而如果[1]为真,既青年男教师大于等于7人,那么男青年至少有7名。 69 | 70 | #### 4. 某中药配方有如下要求(1)如果有甲药材,那么没有乙药材(2)如果没有丙药材,那么必须有丁药材(3)人参和天麻不能都有(4)如果没有甲药材而有丙药材,则需要有人参。如果还有天麻,则关于该配方的断定哪项为真?D 71 | 72 | A 含有甲药材 73 | 74 | B 含有丙药材 75 | 76 | C 没有丙药材 77 | 78 | D 含有乙药材或不含丁药材 79 | 80 | > 无正确答案 81 | > 82 | > 由“含有天麻”和(3)可以推出,不含有人参;进而由(4),否定后件就能否定前件,可以推出,有甲药材或者没有丙药材。 83 | > 84 | > 如果有甲药材,由(1)可以推出,**无乙药材**;如果没有丙药材,由(2)可以推出,**有丁药材**;故**无乙药材或有丁药材**。 85 | > 86 | > 因此,选项中没有正确答案。 87 | 88 | #### 5. 某国拟在甲、乙、丙、丁、戊己6种农作物中进口几种,用于该国庞大的动物饲料产业,考虑到些农作物可能有违禁成分,以及它们之间存在的互补或可替代因素,该国对进口这些农作物有如下要求(1)它们当中不含违禁成分的都进口。2)如果甲或乙含有违禁成分,就进口丙和丁。3)如果戊含有违禁成分,那么己就不进口了;如果进口丙,就进口乙和己。(4)如果不进口己,就进口戊;如果进口戊,就不进口己。根据上述要求,以下哪项所列的农作物是该国可以进囗的; 89 | 90 | A 甲、乙、丙 91 | 92 | B 乙、丙、丁 93 | 94 | C 甲、乙、戊 95 | 96 | D 甲、乙、己 97 | 98 | E 丙、戊、己 99 | 100 | > C 101 | > 102 | > A选项与(2)矛盾 103 | > 104 | > B选项与(2)矛盾 105 | > 106 | > D选项与(3)矛盾 107 | > 108 | > E选项与(4)矛盾 109 | 110 | ## 不定向选择 111 | 112 | #### 1. int i =1;const int j =2;以下说法不正确的是 113 | 114 | A const int *p1 = &i; 115 | 116 | B const int *p2 = &j; 117 | 118 | C int *const p3 = &i; 119 | 120 | D int *const p4 = &j; 121 | 122 | > D 123 | > 124 | > int *const p4 ,p4为指针常量,p4指向的内存位置不能改变,但是,p4所指内存存放的值是可以改变的。j表示常量,其数值不能被改变。 125 | > 126 | > 将j的地址赋给p4后,**p4可以执行其他操作**( 如*p4=4;),将j的值改变,因此,int *const p4 = &j;是错误的。 127 | > 128 | > 129 | 130 | 131 | 132 | #### 2. 以下关于内存的说法正确的是 133 | 134 | A RAM是随机存储器,在断电时将丢失其存储内容,ROM是只读存储器,断电时不会丢失存储内容 135 | 136 | B 内存的数据带宽与内存的数据传输频率、内存数据总线位数以及内存大小有关 137 | 138 | C 用户进程通常情况只能访问用户空间的虚拟地址,不能访问内核空间虚拟地址 139 | 140 | D Linux中使用 buddy system算法可以管理页外内存碎片,使用slub算法可以管理页内内存碎片 141 | 142 | > ACD 143 | > 144 | > B:内存的数据带宽的计算公式是:数据带宽=内存的数据传输频率×内存数据总线位数/8 145 | > 146 | 147 | #### 3. 以下哪些事件会导致进程的创建 148 | 149 | A 系统初始化 150 | 151 | B fork系统调用 152 | 153 | C pthread_ create函数调用 154 | 155 | D 一个批处理作业的初始化 156 | 157 | > ABD 158 | > 159 | > 创建进程的多种方式但凡是硬件,都需要有操作系统去管理,只要有操作系统,就有进程的概念,就需要有创建进程的方式,一些操作系统只为一个应用程序设计,比如扫地机器人,一旦启动,所有的进程都已经存在。 160 | > 161 | > 而对于通用系统(跑很多应用程序),需要有系统运行过程中创建或撤销进程的能力,主要分为4中形式创建新的进程 162 | > 163 | > 1.系统初始化(查看进程 linux中用ps命令, windows中用任务管理器,前台进程负责与用户交互,后台运行的进程与用户无关,运行在后台并且只在需要时才唤醒的进程,称为守护进程,如电子邮件、web页面、新闻、打印) 164 | > 165 | > 2.一个进程在运行过程中开启了子进程(如 nginx开启多进程,os.fork等) 166 | > 167 | > 3.用户的交互式请求,而创建一个新进程(如用户用鼠标双击任意一款软件,qq,微信等) 168 | > 169 | > 4.—个批处理作业的初始化(只在大型机的批处理系统中应用) 170 | > 171 | > 无论哪一种,新进程的创建都是由—个已经存在的进程执行了—个用于创建进程的系统调用而创建的。 172 | 173 | #### 4. 下列说法正确的有 174 | A 计算机体系结构是一门研究计算机系统软件结构的学科。 175 | 176 | B 现代计算机处理器结构按照存储方式划分,可分为复杂指令集计算机和精简指令集计算机 177 | 178 | C RISC技术对比CISC最大的区别就是对CPI的精简 179 | 180 | D 单指令流单数据流计算机的每个机器周期最多执行一条指令 181 | 182 | > CD 183 | > 184 | > A.计算机体系结构主要研究软件、硬件功能分配和对软件、硬件界面的确定 185 | > 186 | > B.现代计算机处理器结构按照**指令系统**方式划分,可分为复杂指令集计算机和精简指令集计算机 187 | > 188 | 189 | #### 5. 32位系统中,该程序的输出为 190 | 191 | ```c 192 | //参数传递 退化为指针 193 | void Func(char str_arg[100]) 194 | { 195 | printf("%d\n",sizeof(str_arg)); 196 | } 197 | int main() 198 | { 199 | char str[] = "Hello"; 200 | printf("%d\n",sizeof(str)); 201 | printf("%d\n",strlen(str)); 202 | char *p = str; 203 | printf("%d\n",sizeof(p)); 204 | Func(str); 205 | return 0; 206 | } 207 | ``` 208 | 209 | A 5 5 4 4 210 | 211 | B 6 5 4 4 212 | 213 | C 6 5 6 4 214 | 215 | D 5 5 5 100 216 | 217 | > B 6 5 4 4 218 | > 219 | > 使用函数**strlen()**求某个字符串的长度时是**不包括结尾标志符'\0'**的,但当你用**sizeof()**求某个字符串占用的内存空间时,**结尾字符'\0'是被包括在里面的**。 220 | > 221 | > strlen用来计算字符串的长度(在C/C++中,字符串是**以"\0"作为结束符的**),它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描直到碰到第一个字符串结束符\0为止,然后返回计数器值。 222 | > 223 | > sizeof是C语言的关键字,它以**字节的形式**给出了其操作数的**存储大小**,操作数可以是一个表达式或括在括号内的类型名,操作数的存储大小由操作数的类型决定。 224 | 225 | #### 6. 有以下程序,求输出结果 226 | 227 | ```c 228 | #include 229 | int fun(int i) 230 | { 231 | int cnt = 0; 232 | while(i) 233 | { 234 | cnt++; 235 | i=i&(i-1); 236 | } 237 | return cnt; 238 | } 239 | int main() 240 | { 241 | printf("%d\n\r",fun(2021)); 242 | return 0; 243 | } 244 | 245 | ``` 246 | 247 | > 8 248 | > 249 | > &是按位与,对应位都为1时该位得1,否则得0。所以 i&(i-1) 的作用:将i的二进制表示中的最右边的1置为0。 250 | > 251 | > 在本题中即数出2021转换成二进制有几个1就会走几次循环(不断除2)。2021对应的二进制是:10100111111,一共8个1,故走8次。 252 | > 253 | > 扩展:(n > 0 && ((n & (n - 1)) == 0)是判断n是不是2的次幂 254 | 255 | #### 7. 若 int x = 5&6,那么x的值为() 256 | 257 | A 3 258 | 259 | B 4 260 | 261 | C 5 262 | 263 | D 6 264 | 265 | ```c# 266 | B 267 | 5: 0101 268 | 6: 0110 269 | x: 0100 270 | ``` 271 | 272 | 273 | 274 | #### 8. 以下错误的表达式为 275 | 276 | ```c 277 | struct { 278 | inr a; 279 | char b; 280 | }Q,*p=&Q; 281 | ``` 282 | 283 | A Q.a 284 | 285 | B (*p).b 286 | 287 | C p->a 288 | 289 | D *p.b 290 | 291 | > D 292 | > 293 | > *p=&Q ,把Q的地址赋值给了指针p,对p解引用其实就是Q。 294 | > 295 | > A 选项肯定是对的,结构体的正常访问方法。 296 | > 297 | > B 选项 (*p).b 等价于 Q.b 298 | > 299 | > C p->a p为指针访问结构体用->没问题。 300 | > 301 | > D *p.b 优先级问题,.的优先级高于 *,所以 *p.b == *(p.b),p为指针,访问结构体成员要用->。 302 | > 303 | > ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E4%B8%89%E6%9C%88/%E4%BC%98%E5%85%88%E7%BA%A7%E6%88%AA%E5%9B%BE.png) 304 | > 305 | > 扩展:结构体中.和->两种访问区别 306 | > 307 | > 定义结构体指针,访问成员时就用-> 308 | > 309 | > 定义结构体变量,访问成员时就用. 310 | > 311 | > ```c 312 | > 313 | > struct A { 314 | > int a; 315 | > char b; 316 | > }; 317 | > struct A q; //访问成员就用:q.a; 318 | > struct A *p; //访问成员就用:p->a; 319 | > ``` 320 | 321 | 322 | #### 9. 关于对象的this指针,以下叙述不正确的有 323 | 324 | A 必须显示地在类中定义声明this数据成员才能使用this指针 325 | 326 | B 一且生成一个对象,该对象的this指针就指向该对象本身 327 | 328 | C 一个类的所有对象的this指针的值都是相同的 329 | 330 | D 不能通过对象的this指针访问对象的数据成员和成员函数 331 | 332 | 333 | 334 | >A 335 | > 336 | >this指针的特点: 337 | > 338 | >( 1 )每个当前对象都含有一个指向该对象的this指针。this指针只能在类的成员函数中使用,在全局函数、静态成员函数中都不能使用 this 。 339 | > 340 | >( 2 ) this 指针是在成员函数的开始前构造,并在成员函数的结束后清除 。 341 | > 342 | >( 3 ) this 指针会因编译器不同而有不同的存储位置,可能是寄存器或全局变量 。 343 | > 344 | >( 4 ) this 是类的指针 。 345 | > 346 | >( 5 ) 因为 this 指针只有在成员函数中才有定义,所以获得一个对象后,不能通过对象使 用 this 指针,所以也就无法知道一个对象的 this 指针的位置。 不过,可以在成员函数中指定this 指针的位置 。 347 | > 348 | >( 6 )普通的类函数(不论是非静态成员函数,还是静态成员函数)都不会创建一个函数表来保存函数指针,只有虚函数才会被放到函数表中。 349 | 350 | 351 | 352 | #### 10. 若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则最节省运算时间的存储方式是 353 | 354 | A 单链表 355 | 356 | B 仅有头指针的单循环链表 357 | 358 | C 双链表 359 | 360 | D 仅有尾指针的单循环链表 361 | 362 | > D 363 | > 364 | > 单链表只能单向遍历,即只能由链表头向链表尾遍历。 365 | > 366 | > 单循环链表也只能单向遍历:链表头->链表尾->链表头; 367 | > 368 | > 对于A,B,C要想在尾端插入结点,需要遍历整个链表。 369 | > 370 | > 对于D,要插入结点,只要改变一下指针即可,要删除头结点,只要删除指针.next的元素即可。 371 | > 372 | > 如果只要知道尾指针p,则通过计算一次p->next就能获得头指针;插入和删除算法复杂度O(1)+O(1) 373 | > 374 | > 而如果只知道头指针,则需要遍历整个链表来获得尾指针的位置;插入和删除算法复杂度O(1)+O(N) 375 | > 376 | > 所以D仅有尾指针的单循环链表存储方式最节省运算时间 377 | > 378 | 379 | 380 | 381 | ## 填空题 382 | 383 | #### 1. F和Q分别是指向单链表两个元素的指针,那么,F所指元素是Q所指元素后继的条件是(Q->next == F) 384 | 385 | #### 2.设有一个空栈,现有输入序列为1,2,3,4,5,经过 push, push, pop, push pop, push, pop, push后,输出序列是(2,3,4) 386 | 387 | > 2,3,4 388 | > 389 | > push进栈,栈中是1 390 | > 391 | > push进栈,栈中是1,2 392 | > 393 | > pop出栈,栈中是1,**输出2** 394 | > 395 | > push进栈,栈中是1,3 396 | > 397 | > pop出栈,栈中是1,**输出3** 398 | > 399 | > push进栈,栈中是1,4 400 | > 401 | > pop出栈,栈中是1,**输出4** 402 | > 403 | > push进栈,栈中是1,5 404 | 405 | 406 | 407 | #### 3.H是一个带有头结点的单链表,那么在第一个元素之后插入一个结点(设P为要插入节点的指针),其操作是( p->next=H->next; )(H->next = p;) 408 | 409 | #### 4.已知二叉树后序遍历序列为dabec,中序遍历序列为debac,它的前序遍历序列为 410 | 411 | > cedba 412 | > 413 | > 1、由后续遍历可知c是根结点。 414 | > 415 | > 2、由中序遍历可知deba在c的左孩子树上。 416 | > 417 | > 3、由后序遍历知e是c的左孩子树的根结点。 418 | > 419 | > 4、由中序遍历可知d是e的左孩子,ba在e的右孩子树上。 420 | > 421 | > 5、由后序遍历,可以得出b是e的右孩子,a是e的左孩子,而第4步中确定了a不在e的左孩子数上,因此,a只能在b上。 422 | > 423 | > 6、由中序遍历,可知,a是b的右孩子。 424 | > 425 | > 所以前序序列为cedba,具体如下图所示。 426 | > 427 | > ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E4%B8%89%E6%9C%88/%E6%8E%A8%E5%AF%BC%E4%BA%8C%E5%8F%89%E6%A0%91.png) 428 | 429 | 430 | 431 | #### 5.以下程序的输出结果为 432 | 433 | ```c 434 | #include 435 | int main() 436 | { 437 | int a; 438 | a=(int)((double)(3/2)+0.5); 439 | printf("a = %d",a); 440 | return 0; 441 | } 442 | ``` 443 | 444 | 445 | 446 | > 1 447 | > 448 | > 3和2是整形常量,所以3/2=1;前面(double) 1 = 1.000000;1.000000+0.5 = 1.500000;double转int会直接去掉小数部分。所以答案为1。 449 | > 450 | > **下面简单分析下double转int为什么会舍去小数部分** 451 | > 452 | > 根据国际标准 IEEE 754,任意一个二进制浮点数 V 可以表示成下面的形式: 453 | > 454 | > V = (-1) ^ s × M × 2 ^ E 455 | > 456 | > (1)(-1)^s 表示符号位,当 s=0,V 为正数;当 s=1,V 为负数。 457 | > 458 | > (2)M 表示有效数字,大于等于 1,小于 2,但整数部分的 1 不变,因此可以省略。M由frac编码。 459 | > 460 | > (3)2^E 表示指数位。E由exp编码。 461 | > 462 | > ![双精度浮点数在内存中的存放方式](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E4%B8%89%E6%9C%88/%E5%8F%8C%E7%B2%BE%E5%BA%A6%E6%B5%AE%E7%82%B9%E6%95%B0%E5%9C%A8%E5%86%85%E5%AD%98%E4%B8%AD%E7%9A%84%E5%AD%98%E6%94%BE%E6%96%B9%E5%BC%8F.png) 463 | > 464 | > 对于 64 位的双精度数来说,从低位到高位,尾数 M 用 52 位来表示,阶码用 11 位来表示,而符号位用最高位 1 位来表示,0 表示正,1 表示负。 465 | > 466 | > 将1.5转换为双精度浮点数的过程如下: 467 | > 468 | > 1. 将十进制数1.5转换成二进制为1.1。 469 | > 2. 1.1用二进制的科学计数法表示为1.1 * 2^0 470 | > 3. 按照上面浮点数的存储结构, 得出符号位为: 0,表示正数;阶码(指数) E 为1023; 小数部分 M 为1。 471 | > 4. 双 精 度 的 二 进 制 位 : 0_01111111111_0000000000000000000000000000000000000000000000000001 472 | > 473 | > int类型为32位,double转换为int只能截取低32位为00000000000000000000000000000001。 474 | > 475 | > 所以最终的输出结果为1。 476 | > 477 | > 478 | 479 | #### 6.这段程序会存在什么问题 480 | 481 | ```c 482 | #include 483 | void my_alloc(char **p) 484 | { 485 | *p = (char *)malloc(100); 486 | } 487 | intm main() 488 | { 489 | char *otr = NULL; 490 | char *ptr = NULL; 491 | my_alloc(&ptr); 492 | strcpy(ptr,"hello world"); 493 | printf("%s\n",ptr); 494 | return 0; 495 | } 496 | ``` 497 | 498 | > 内存泄漏,分配给其他变量的内存就会减小。**我们在删除一个指针之后,编译器只会释放该指针所指向的内存空间,而不会删除这个指针本身。此时p也就成为一个野指针** 499 | > 500 | > **扩展**: 501 | > 502 | > **free()到底释放了什么?** 503 | > 504 | > free()释放的是**指针指向的内存!注意,释放的是内存,不是指针**。 505 | > 506 | > **指针是一个变量,只有程序结束时才被销毁**。释放了内存空间后,原来指向这块空间的指针还是存在,只不过现在指针指向的内容的垃圾,是未定义的,所以说是垃圾。 507 | > 508 | > 因此,释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了。当然,具体情况要具体分析以及具体解决。比如说,你定义了一个指针,在一个函数里申请了一块内存,然后通过函数返回传递给这个指针,那么也许释放这块内存这项工作就应该留给其他函数了。 509 | > 510 | >**malloc()到底从哪里得到了内存空间?** 511 | > 512 | >从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。 513 | > 514 | 515 | 516 | 517 | #### 7.改正程序中的错误 518 | 519 | 下列给定程序将数组元素循环右移,数组大小和元素以及移动位数由键盘输入指定,例如数组{1,2,3,4,5,6},循环右移三位,得到结果为{4,5,6,1,2,3} 520 | 521 | 请改正程序中的错误,使它能得出正确的结果。注意:不能更改程序的结构(共有四处错误) 522 | 523 | ```c 524 | #include 525 | #include 526 | void shift_func(int *array, int len, int k) 527 | { 528 | int i = 0, j = 0; 529 | int temp = 0; 530 | if (array == NULL) 531 | return; 532 | k %= len; 533 | for (i = 0; i < k; i++) 534 | { 535 | temp = array[len - 1]; 536 | for (j = len; j > 0; j--) 537 | { 538 | array[j] = array[j - 1]; 539 | } 540 | array[0] = temp; 541 | } 542 | } 543 | int main() 544 | { 545 | int len = 0, k = 0, i = 0; 546 | int *array = NULL; 547 | 548 | scanf("%d%d", &len, &k); 549 | array = (int*)malloc(len * sizeof(int*)); 550 | if (array == NULL) 551 | return -1; 552 | printf("input the array\n"); 553 | for (i = 0; i < len; i++) 554 | scanf("%d", array[i]); 555 | 556 | shift_func(array, len, k); 557 | 558 | printf("after shift the array is:\n"); 559 | for (i = 0; i < len; i++) 560 | printf("%d", array[i]); 561 | printf("\n"); 562 | 563 | return 0; 564 | } 565 | ``` 566 | 567 | 修改后的程序如下所示 568 | 569 | ```c 570 | void shift_func(int *array, int len, int k) 571 | { 572 | int i = 0, j = 0; 573 | int temp = 0; 574 | if (array == NULL) 575 | return; 576 | k %= len; 577 | for (i = 0; i < k; i++) 578 | { 579 | temp = array[len - 1]; 580 | for (j = len; j > 0; j--) 581 | { 582 | array[j] = array[j - 1]; 583 | } 584 | array[0] = temp; 585 | } 586 | } 587 | int main() 588 | { 589 | int len = 0, k = 0, i = 0; 590 | int *array = NULL; 591 | 592 | scanf("%d%d", &len, &k); 593 | array = (int*)malloc(len * sizeof(int));//array = (int*)malloc(len * sizeof(int)); 594 | if (array == NULL) 595 | return -1; 596 | printf("input the array\n"); 597 | for (i = 0; i < len; i++) 598 | scanf("%d", &array[i]);//scanf("%d", &array[i]); 599 | 600 | shift_func(array, len, k); 601 | 602 | printf("after shift the array is:\n"); 603 | for (i = 0; i < len; i++) 604 | printf("%d", array[i]); 605 | printf("\n"); 606 | 607 | // free(array); 608 | // array = NULL; 609 | return 0; 610 | } 611 | ``` 612 | 613 | 614 | 615 | ## 编程题 616 | 617 | 输入年,月,日,计算这一天是该年的第几天。年份符合以下两种条件的任意种即为闰年,闰年里2月会有29天: 618 | 619 | 1.年份是4的倍数但不是100的倍数。 620 | 621 | 2.年份是40的倍数 622 | 623 | 输入描述: 624 | 625 | 输入表示日期的格式: Year, Month, Day包含三个整数:年(1<=Year3000),月(1<= Month<=12),日(1<=Day<=31) 626 | 627 | **思路**:比较容易想到的一种方法是查表。将一年中每个月份的天数放进数组中,数组下标索引即代表月份。 628 | 629 | 这里要注意闰年的处理。为了方便,我们定义两个数组,分别对应闰年的天数和非闰年的天数。再定义一个变量flag来判断是否为闰年即可。具体代码如下所示。 630 | 631 | ```c 632 | /* 633 | * @Description: 北京联发科嵌入式软件工程师笔试题目 634 | * @Version: 635 | * @Autor: 嵌入式与Linux那些事 636 | * @Date: 2021-3-15 22:24:12 637 | * @LastEditors: 嵌入式与Linux那些事 638 | * @LastEditTime: 2021-3-15 22:39:41 639 | */ 640 | #include 641 | //两个数组,分别存放闰年和非闰年每个月的天数,对应 1~ 12月 642 | int b1[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; 643 | int b2[12]= {31,29,31,30,31,30,31,31,30,31,30,31}; 644 | 645 | /** 646 | * @Description: 累加天数 647 | * @Param: months,月份。flag,闰年判断标志位 648 | * @Return: 天数 649 | * @Author: 公众号【嵌入式与Linux那些事】 650 | */ 651 | int add(int months,int flag) 652 | { 653 | int i,j = 0; 654 | if(flag) 655 | { 656 | for(i=0; i=1 && years<=3000 && months>=1 && months<=12 && days>=1 && days<=31) 679 | { 680 | if((years%4==0&&years%100!=0)) 681 | { 682 | flag = 1; 683 | } 684 | printf("result is %d",add(months,flag)); 685 | } 686 | else 687 | { 688 | printf("invalid parameter"); 689 | } 690 | return 0; 691 | } 692 | ``` 693 | 694 | 695 | 696 | 今天的题目就分享到这里,下一篇文章,将会分享小米的笔试题目和答案。 697 | 698 | 699 | 700 | 往期精彩 701 | 702 | [9个提高代码运行效率的小技巧你知道几个?](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247484631&idx=1&sn=cfc2c6aa45c1f10faa8ca1adddf91fb5&chksm=c060283ef717a1285b56534054b983cbb6e212a55f491adf7df61b38294e4f553c5176d6a80d&token=99728457&lang=zh_CN#rd) 703 | 704 | [24张图7000字详解计算机中的高速缓存](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247484470&idx=1&sn=98f80777cd8500885da981516213bf7f&chksm=c06028dff717a1c9ea56ae26e9e3352e0dcb82ffdc37711e396df33781605c0eb0b757e270de&token=99728457&lang=zh_CN#rd) 705 | 706 | [面试官不讲武德,居然让我讲讲蠕虫和金丝雀!](http://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247484932&idx=1&sn=56a8cd2f4af474b8908d05ec1643cf69&chksm=c0602aedf717a3fb866edae088e77c161d1b39d503d695b14bb6c8fc6fd28b4cd6ea7d4811bd&mpshare=1&scene=23&srcid=0307LtWpQMqiGTlc6EgUtNk3&sharer_sharetime=1615106866041&sharer_shareid=04d13239c5be2ec55929ede9a8956f27#rd) 707 | 708 | [分析下B(BL)/LDR指令](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247485061&idx=1&sn=753e18bf7cbb2caa2c8940a15293f475&chksm=c0602a6cf717a37a91ac526be089b5c5f281fefb4c33a489ea57ea7d49c36c4803da6c28a492&token=669353782&lang=zh_CN#rd) 709 | 710 | 711 | 712 | 扫描下方二维码,加我微信进技术交流群。 713 | 714 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E4%B8%89%E6%9C%88/%E4%B8%AA%E4%BA%BA%E5%BE%AE%E4%BF%A1.png) 715 | -------------------------------------------------------------------------------- /名企笔试真题/小米嵌入式软件工程师笔试题目解析.md: -------------------------------------------------------------------------------- 1 | >哈喽,大家好。我又来分享笔试题目了。今天分享的是某大厂的嵌入式软件开发工程师的笔试题目。这份题目很奇怪,操作系统,数据结构,网络基础,Java,C++,数据库,正则表达式,Linux都考到了。当时做题的时候,我都怀疑发错卷子了。。。还好最后两道大题都做了出来,否则,笔试很容易就挂了。面试这个公司的时候,一共面了两轮技术面,一轮HR面。最后也收获了Offer。但是,已经是十月中旬,手上没有三方协议了,很可惜,错过了。面经可以参考下这篇文章[2020秋招联发科小米等面经分享](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247483909&idx=1&sn=a4e866f897a581e8e91389b2d9b412b6&chksm=c0602eecf717a7fa5b962c89cb9618af398c9f7a6ccc1859c724f02403b807ef81af8cf5aab3&token=669353782&lang=zh_CN#rd) 2 | 3 | 4 | 5 | ## 选择题 6 | 7 | **1.已经获得除CPU以外的所有所需资源的进程处于()状态** 8 | 9 | A 就绪状态 10 | 11 | B 阻塞状态 12 | 13 | C 运行状态 14 | 15 | D 活动状态 16 | 17 | > A 18 | > 19 | > 进程的五状态模型: 20 | > 21 | > 运行态:该进程正在执行。 22 | > 23 | > 就绪态:进程已经做好了准备,只要有机会就开始执行。 24 | > 25 | > 阻塞态(等待态):进程在某些事情发生前不能执行,等待阻塞进程的事件完成。 26 | > 27 | > 新建态:刚刚创建的进程,操作系统还没有把它加入到可执行进程组中,通常是进程控制块已经创建但是还没有加载到内存中的进程。 28 | > 29 | > 退出态:操作系统从可执行进程组中释放出的进程,或由于自身或某种原因停止运行。 30 | 31 | 32 | 33 | **2.某二叉树的中序遍历序列为32145,后序遍历序列为32145,则前序遍历序列为** 34 | 35 | A 54123 36 | 37 | B 32154 38 | 39 | C 32541 40 | 41 | D 54321 42 | 43 | > A 44 | > 45 | > 二叉树的中序遍历序列为 32145 ,后序遍历序列为32145 ,可知该树只有左子树结点,没有右子树结点, 5 为根结点。 46 | > 47 | > 中序遍历序列与后序遍历序列相同,说明该树只有左子树没有右子树,因此该树有 5 层,从顶向下依次为54123 。 48 | > 49 | > 具体分析过程也可以参考下[北京联发科嵌入式软件工程师笔试题目解析](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247485235&idx=1&sn=8ff93eb768f37f40ed1be053097eb8a0&chksm=c0602bdaf717a2ccf200fa70233c6e8af1dd5ef4101457e78df4b617c4e17aa3f293d76888a0&token=1037474555&lang=zh_CN#rd) 50 | 51 | 52 | 53 | **3.若已知一个栈的入栈顺序是1,2,3...,n,其输出序列为P1,P2,P3,....Pn,若P1是n,则Pi=()?** 54 | 55 | A i 56 | 57 | B n-i+1 58 | 59 | C 不确定 60 | 61 | D n-i 62 | 63 | > B 64 | > 65 | > 栈的排列遵循先进后(即后进先出)出的原则 66 | > 67 | > 因为P1是n,是出栈的第一个数字,说明在n之前进栈的数字都没有出栈。所以这个顺序是确定的。 68 | > 69 | > 还可以知道,最后出栈的一定是数字1,也就是Pn。代入这个式子,是正确的。 70 | 71 | 72 | 73 | **4(多选题).下面协议中属于应用层协议的是()** 74 | 75 | A ICMP、ARP 76 | 77 | B FTP、 TELNET 78 | 79 | C HTTP、SNMP 80 | 81 | D SMTP、POP3 82 | 83 | > BD 84 | > 85 | > 1、物理层:以太网 、 调制解调器 、 电力线通信(PLC) 、SONET/SDH 、 G.709 、 光导纤维 、 同轴电缆、 双绞线等。 86 | > 87 | > 2、数据链路层:Wi-Fi(IEEE 802.11)、WiMAX(IEEE 802.16) 、ATM 、 DTM 、 令牌环 、以太网、FDDI、 帧中继、 GPRS 、 EVDO、HSPA 、HDLC 、 PPP 、 L2TP 、PPTP 、ISDN·STP、CSMA/CD等。 88 | > 89 | > 3、网络层协议:IP IPv4 、IPv6、 ICMP、ICMPv6·IGMP、IS-IS 、IPsec 、ARP 、RARP 、RIP等。 90 | > 91 | > 4、传输层协议:TCP、 UDP、TLS 、 DCCP、 SCTP 、 RSVP 、OSPF 等。 92 | > 93 | > 5、应用层协议:DHCP 、DNS、 FTP 、Gopher 、 HTTP、 IMAP4 、 IRC、 NNTP 、 XMPP、POP3 、SIP、 SMTP、SNMP 、SSH、TELNET 、 RPC 、RTCP 、RTP 、RTSP、SDP 、 SOAP、GTP、STUN 、NTP、SSDP 、 BGP 等。 94 | 95 | **5.下列程序段的时间复杂度是()** 96 | 97 | ```c 98 | int fact(int n){ 99 | if(n<=1){ 100 | return 1; 101 | } 102 | return n*fact(n-1); 103 | } 104 | ``` 105 | 106 | A O(log2n) 107 | 108 | B O(nlog2n) 109 | 110 | C O(n) 111 | 112 | D O(n*n) 113 | 114 | > C 115 | > 116 | > 当n<=1时执行return 1这一个语句,每次返回上一层都执行n*fact(n-1)这一个语句,共执行n-1次。因此共执行基本语句n次,时间复杂度为O(n) 117 | 118 | **6.下列排序算法中最好情况和最坏情况的时间复杂度相同的是?()** 119 | 120 | A 堆排序 121 | 122 | B 快速排序 123 | 124 | C 冒泡排序 125 | 126 | D 归并排序 127 | 128 | > A C D 129 | > 130 | > 堆排序在最好和最坏情况下的时间复杂度均为O(nlogn) 131 | > 132 | > 快速排序最好和最坏情况下的时间复杂度分别为O(nlogn)和O(n^2 ) 133 | > 134 | > 冒泡排序排序在最好和最坏情况下的时间复杂度均为O(nlogn) 135 | > 136 | > 归并排序在最好和最坏情况下的时间复杂度均为O(nlogn) 137 | 138 | **7.将两个各有n个元素的有序表归并成一个有序表,最少的比较次数是?()** 139 | 140 | A n 141 | 142 | B 2n 143 | 144 | C n-1 145 | 146 | D 2n-1 147 | 148 | > A 149 | > 150 | > 归并排序是将两个或两个以上的有序子表合并成一个新的有序表。在归并排序中,核心步骤是将相邻的两个有序序列归并为一个有序序列。 151 | > 152 | > 题目中告诉我们,有两个各有n个元素的有序序列,要将这两个序列归并成一个有序序列,其方法是依次从小到大取每个序列中的元素进行比较,将较小的放进一个新的序列中,直到取完一个有序序列中的所有元素。再把另一个序列中剩下的元素放进新序列的后面即可。 153 | > 154 | > 最好的情况是一个有序序列中的最小元素大于另一个有序序列中的所有元素,这样只需要比较n次。 155 | 156 | **8.将递归算法转换为非递归算法通常需要使用()** 157 | 158 | A 栈 159 | 160 | B 队列 161 | 162 | C 队列 163 | 164 | D 广义表 165 | 166 | > D 167 | 168 | **9.在MySql中, productname regexp '[1-3]xiaomi'的含义是()** 169 | 170 | A productname 匹配“xiaomi重复1次或5次”的字符串 171 | 172 | B productname 匹配“xiaomi字符串前一个字符为1或3“的字符串 173 | 174 | C productname 匹配“xiaomi重复1到3次”的字符串 175 | 176 | D productname 匹配“xiaomi字符串前一个字符为1到3“的字符串 177 | 178 | > D 179 | 180 | **10.同个进程的不同线程以下不能被共享的是?()** 181 | 182 | A 全局变量 183 | 184 | B 堆 185 | 186 | C 文件句柄 187 | 188 | D 栈 189 | 190 | > B 191 | > 192 | > 线程共享的进程环境包括: 193 | > 194 | > 进程代码段、进程的公有资源(如全局变量,利用这些共享的数据,线程很容易的实现相互之间的通信)、进程打开的文件描述符、消息队列、信号的处理器、进程的当前目录、进程用户ID、进程组ID 195 | > 196 | > 线程独占资源: 197 | > 198 | > 线程ID、寄存器组的值、用户栈、内核栈(在一个进程的线程共享堆区(heap))、错误返回码、线程的信号屏蔽码、线程的优先级 199 | 200 | ## 专项选择题 201 | 202 | **1.下列Java函数的执行结果是什么()** 203 | 204 | ```java 205 | static boolean foo(charc) 206 | { 207 | System.out.print(c); 208 | return true; 209 | } 210 | public static void main(string[] args){ 211 | int i = 0; 212 | for(foo('B');foo('A')&&(i<2);foo('C')) 213 | { 214 | i++; 215 | foo('D'); 216 | } 217 | } 218 | ``` 219 | 220 | A BADCBDCB 221 | 222 | B BACDBACD 223 | 224 | C BADCADCA 225 | 226 | D 运行时抛出异常 227 | 228 | > C 229 | > 230 | > 1.其实foo('B');就是初始化条件,只会执行一次,所以第一个打印的肯定是B。 231 | > 232 | > 2.因为i=0;循环条件是i<2 (由此可知,循环i等于2的时候就会停止循环),所以0<2满足条件,接着会输出A。然后执行i++;i就变成1了,在输出D 233 | > ,在最后输出C。一次循环后的结果是:BADC。 234 | > 235 | > 3.第二次循环的开始是foo('B');是初始条件,所以不会执行。直接从foo('A')开始,输出A,然后i为1,且小于2,此时循环体内再次执行i++;i的值为2了,再次输出D,最后输出C。第二次循环输出:ADC。 236 | > 237 | > 4.然后循环再次执行for(foo('B');foo('A')&&(i<2);foo('C')),直接输出A。i的值在第二轮循环后的值变成了2,2<2不成立,终止循环,输出A。 238 | > 239 | > 故输出结果是:BADCADCA。 240 | 241 | **2.下列有关软链接表述正确的是?()** 242 | 243 | A 不可以对不存在的文件创建软链接 244 | 245 | B 不能对目录创建软链接 246 | 247 | C 和普通件没有什么不同,inode都指向同一个文件在硬量中的区块 248 | 249 | D 保存了其代表的文件的绝对路径是另一种文件。在硬盘上有独立的区块,访问时替代自身路径 250 | 251 | > C 252 | > 253 | > A:错。后半句说的是硬链接。硬链接是共同拥有同一个inode,不过是每个链接名不同,暂时理解成不同的文件名却指向同一文件。一个文件每加一个硬链接linkcount加1。 254 | > 255 | > B:错。可以对目录创建软链接。如下图所示。 256 | > 257 | > ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E4%B8%89%E6%9C%88/%E5%AF%B9%E7%9B%AE%E5%BD%95%E5%88%9B%E5%BB%BA%E8%BD%AF%E9%93%BE%E6%8E%A5.png) 258 | > 259 | > D:错。可以对不存在的文件创建软链接,如下图所示。 260 | > 261 | > ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E4%B8%89%E6%9C%88/%E5%AF%B9%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E6%96%87%E4%BB%B6%E5%88%9B%E5%BB%BA%E8%BD%AF%E9%93%BE%E6%8E%A5.png) 262 | 263 | **3.选项中那一行代码可以替换//add code here 而不产生编译错误()** 264 | 265 | ```java 266 | public abstruct class MyClass{ 267 | publicint testInt = 5; 268 | //addcode here 269 | publicvoid method(){ 270 | } 271 | } 272 | ``` 273 | 274 | A public abstruct void another Method(){} 275 | 276 | B testInt = testInt * 5 277 | 278 | C public int method(); 279 | 280 | D public abstruct void another Method(int a) 281 | 282 | > D 283 | > 284 | > A:该项方法有abstract修饰,所以是抽象方法,由于抽象方法不能有方法体,所以A项错误 285 | > 286 | > B:类体中只能定义变量和方法,不能有其他语句,所以B项错误 287 | > 288 | > C:选项中的方法和类中的方法重复,所以会发生编译异常,所以C项错误 289 | 290 | 291 | 292 | **4.有关Java静态初始化块说法不正确的是?()** 293 | 294 | A 用户可以控制何时执行静态初始化块 295 | 296 | B 无法直接词用静态初始化块 297 | 298 | C 在创建第一个实例前,将自动调用静态初始化块来初始化 299 | 300 | D 静态初始化块没有访问修饰符和参数 301 | 302 | > A 303 | > 304 | > JAVA的初始化顺序: 305 | > 306 | > 父类的静态成员初始化>父类的静态代码块>子类的静态成员初始化>子类的静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造方法 307 | 308 | **5(多选题)以下分别对变量a给出定义,正确的有()** 309 | 310 | A 一个有10个指针的数组,该指针指向同一个整型数:int *a[10]; 311 | 312 | B 一个指向10个整型数组的指针:int ( *a)[10]; 313 | 314 | C 一个指向函数的指针,该函数有一个整型数并返回一个整型数:int *a(int); 315 | 316 | D 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数:int ( *a[10])(int); 317 | 318 | > ABD 319 | > 320 | > C改为:int (*a)(int) 321 | > 322 | > 指针数组:首先是一个数组,数组里面的元素都是指针;(存储指针的数组) 323 | > 324 | > 数组指针:首先是一个指针,指针指向一个一维数组;(指向数组的指针) 325 | > 326 | > 函数指针:一定要理解,回调中经常使用函数指针; 327 | > 328 | > 指针函数:就是一个普通函数,只是返回值是指针形式; 329 | 330 | **6(多选题)下列叙述正确的是()** 331 | 332 | A 指针可以为空,引用不能为空。 333 | 334 | B 不存在指向空值的引用,但是存在指向空值的指针 335 | 336 | C 引用必须被初始化,但是指针不必 337 | 338 | D 指针初化后不能被改变,引用可以改变所指对象 339 | 340 | > ABC 341 | > 342 | > D:引用初始化以后不能被改变,指针可以改变所指的对象 343 | 344 | **7.下列关于C++容器描述错误的是?()** 345 | 346 | A list类型支持双向顺序访问,在list中任何位置插入删除都很快 347 | 348 | B deque类型支持快速顺序访间,在头尾插入/删除速度很快 349 | 350 | C C++标准库map的底层实现为红黑树 351 | 352 | D vector类型在每次调用 pushback时都在栈上开辟新内存 353 | 354 | > B 355 | > 356 | > deque:双端队列。支持快速随机访问。在头尾位置插入/删除速度很快。 357 | 358 | **8(多选题)C++中,下列数据类型的转换,哪个可能会发生信息丢失?** 359 | 360 | A int -> double 361 | 362 | B int -> long 363 | 364 | C long -> float 365 | 366 | D int -> char 367 | 368 | > CD 369 | > 370 | > 精度丢失只会发生在从大范围到小范围的转换 371 | > 372 | > 32位编译器: 373 | > 374 | > char short int long float double 指针 375 | > 376 | > 1 2 4 4 4 8 4 377 | > 378 | > 379 | > 64位编译器: 380 | > 381 | > char short int long float double 指针 382 | > 383 | > 1 2 4 8 4 8 8 384 | 385 | **9.在Java中,要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以()** 386 | 387 | A 使用 private关键字 388 | 389 | B 让该类不使用任何关键字 390 | 391 | C 使用public关键字 392 | 393 | D 使用protected关键字 394 | 395 | > B 396 | > 397 | > default和protected的区别是: 398 | > 399 | > 前者只要是外部包,就不允许访问。 400 | > 401 | > 后者只要是子类就允许访问,即使子类位于外部包。 402 | > 403 | > 总结:default拒绝一切包外访问;protected接受包外的子类访问 404 | 405 | **10(多选题)list和vector的区别有哪些()** 406 | 407 | A vector拥有一段连续的内存空间,因此支持随机存取,如果需要高效的随即存取,而不在乎插入和删除的效率,使用 vector. 408 | 409 | B list拥有一段不连续的内存空间,因此支持随机存取,如果需要大量的插入和删除,而不关心随即存取,则应使用list 410 | 411 | C 已知需要存储的元素时,使用list较好 412 | 413 | D 如果需要任意位置插入元素,使用 vector较好 414 | 415 | > AB 416 | > 417 | > C:已知需要存储的元素时,vector要好 418 | > 419 | > D:如果需要任意位置插入元素,list要好 420 | 421 | ## 编程题1(字符串筛选) 422 | 423 | 给定一个字符串,需要去除所有之前曾经出现过的字符,只保留第一次出现的字符。 424 | 425 | 样例输入:hello,welcome to xiaomi 426 | 427 | 样例输出:helo,wcmtxia 428 | 429 | ** 思路** 430 | 431 | 1. 首先需要定义两个数组,分别为“输入的字符串数组”old[ ] 以及 “输出的字符串数组” new[ ]; 432 | 433 | 2. 取old数组中的第一个字符去和new数组中的每一个字符串相比较是否相同,若出现相同,则取old数组的下一个字符再次与new中每一个字符相比较,若都不相同则存入new的数组中; 434 | 435 | 3. 最后输出数组new; 436 | 437 | 438 | 439 | **代码** 440 | 441 | ```c 442 | #include 443 | void killsame(char *o, char *n) 444 | { 445 | int i=0, j, k=0; 446 | int label; 447 | 448 | while(o[i] != '\0') 449 | { 450 | label = 1; 451 | for(j=0; j 521 | bool isValid(char * s){ 522 | 523 | int len = strlen(s); 524 | char stack[3500]; 525 | int top = -1; 526 | int i = 0; 527 | for( i=0;i=0) //数组内仍有左括号,没有右括号与之匹配 556 | return false;\ 557 | //这里一定要有返回值 558 | return true; 559 | } 560 | int main(void) 561 | { 562 | printf("Please enter a bunch of brackets:\n"); 563 | char brackets[100]; 564 | scanf("%s",brackets); 565 | printf(isValid(brackets)); 566 | return 0; 567 | } 568 | ``` 569 | 570 | 571 | 572 | 今天的题目就分享到这里,下一篇文章,将会分享大厂的笔试题目解析。 573 | 574 | 575 | 576 | 往期精彩 577 | 578 | [9个提高代码运行效率的小技巧你知道几个?](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247484631&idx=1&sn=cfc2c6aa45c1f10faa8ca1adddf91fb5&chksm=c060283ef717a1285b56534054b983cbb6e212a55f491adf7df61b38294e4f553c5176d6a80d&token=99728457&lang=zh_CN#rd) 579 | 580 | [24张图7000字详解计算机中的高速缓存](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247484470&idx=1&sn=98f80777cd8500885da981516213bf7f&chksm=c06028dff717a1c9ea56ae26e9e3352e0dcb82ffdc37711e396df33781605c0eb0b757e270de&token=99728457&lang=zh_CN#rd) 581 | 582 | [面试官不讲武德,居然让我讲讲蠕虫和金丝雀!](http://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247484932&idx=1&sn=56a8cd2f4af474b8908d05ec1643cf69&chksm=c0602aedf717a3fb866edae088e77c161d1b39d503d695b14bb6c8fc6fd28b4cd6ea7d4811bd&mpshare=1&scene=23&srcid=0307LtWpQMqiGTlc6EgUtNk3&sharer_sharetime=1615106866041&sharer_shareid=04d13239c5be2ec55929ede9a8956f27#rd) 583 | 584 | [分析下B(BL)/LDR指令](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247485061&idx=1&sn=753e18bf7cbb2caa2c8940a15293f475&chksm=c0602a6cf717a37a91ac526be089b5c5f281fefb4c33a489ea57ea7d49c36c4803da6c28a492&token=669353782&lang=zh_CN#rd) 585 | 586 | 587 | 588 | 扫描下方二维码,加我微信进技术交流群。 589 | 590 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E4%B8%89%E6%9C%88/20210323231124.png) 591 | -------------------------------------------------------------------------------- /知识点总结/ARM体系与架构.md: -------------------------------------------------------------------------------- 1 | # 不再提供md格式的源文件,需要完整文档的可以去公众号领取 2 | ![图片](https://user-images.githubusercontent.com/45563242/117952196-8330de80-b347-11eb-8d3b-4344cb5f7f9d.png) 3 | 4 | ## PDF获取方式 5 | 6 | 加我微信【LinuxDriverDev】,进技术交流群。 7 | 8 | ![](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/%E4%B8%AA%E4%BA%BA%E4%BA%8C%E7%BB%B4%E7%A0%81-%E7%BE%8E%E5%8C%96.png) 9 | 10 | 关注公众号【嵌入式与Linux那些事】,回复【offer】即可**获取最新版**。 11 | 12 | ![](https://github.com/ZhongYi-LinuxDriverDev/Picture/blob/main/Wechat/%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.png) 13 | -------------------------------------------------------------------------------- /知识点总结/CandC++.md: -------------------------------------------------------------------------------- 1 | # 不再提供md格式的源文件,需要完整文档的可以去公众号领取 2 | ![图片](https://user-images.githubusercontent.com/45563242/117952196-8330de80-b347-11eb-8d3b-4344cb5f7f9d.png) 3 | 4 | ## PDF获取方式 5 | 6 | 加我微信【LinuxDriverDev】,进技术交流群。 7 | 8 | ![](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/%E4%B8%AA%E4%BA%BA%E4%BA%8C%E7%BB%B4%E7%A0%81-%E7%BE%8E%E5%8C%96.png) 9 | 10 | 关注公众号【嵌入式与Linux那些事】,回复【offer】即可**获取最新版**。 11 | 12 | ![](https://github.com/ZhongYi-LinuxDriverDev/Picture/blob/main/Wechat/%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.png) 13 | -------------------------------------------------------------------------------- /知识点总结/Linux驱动.md: -------------------------------------------------------------------------------- 1 | # 不再提供md格式的源文件,需要完整文档的可以去公众号领取 2 | ![图片](https://user-images.githubusercontent.com/45563242/117952196-8330de80-b347-11eb-8d3b-4344cb5f7f9d.png) 3 | 4 | ## PDF获取方式 5 | 6 | 加我微信【LinuxDriverDev】,进技术交流群。 7 | 8 | ![](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/%E4%B8%AA%E4%BA%BA%E4%BA%8C%E7%BB%B4%E7%A0%81-%E7%BE%8E%E5%8C%96.png) 9 | 10 | 关注公众号【嵌入式与Linux那些事】,回复【offer】即可**获取最新版**。 11 | 12 | ![](https://github.com/ZhongYi-LinuxDriverDev/Picture/blob/main/Wechat/%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.png) 13 | -------------------------------------------------------------------------------- /知识点总结/勘误.md: -------------------------------------------------------------------------------- 1 | 2 | ## C/C++ 3 | 4 | ### 什么情况下使用const关键字? 5 | 原文: 6 | ```c 7 | const int*p; //指向常量的指针,p值可以变,p指向的数值内容不可变 8 | int const*p; //常量指针 p指向的内存不可以变,但是p指向的数值可以变 9 | int*const p;//同2 10 | const int* const p;//指向常量的常量指针。即p指向的内存和数值都不可变 11 | ``` 12 | 改为: 13 | ```c 14 | const int*p; //常量指针,指向常量的指针。即p指向的内存可以变,p指向的数值内容不可变 15 | int const*p; //同上 16 | int*const p;//指针常量,本质是一个常量,而用指针修饰它。 即p指向的内存不可以变,但是p内存位置的数值可以变 17 | const int* const p;//指向常量的常量指针。即p指向的内存和数值都不可变 18 | ``` 19 | 20 | ### 如何求解二进制中0的个数 21 | 22 | 新增: 23 | **图示分析(以25为例):** 24 | 25 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501151749.png) 26 | 27 | ### 常量指针,指向常量的指针,指向常量的常量指针有什么区别? 28 | 29 | 原文 30 | 31 | 1. **常量指针** 32 | 33 | ```c 34 | int * const p 35 | ``` 36 | 37 | 先看const再看 * ,是p是一个常量类型的指针,不能修改这个指针的指向,但是这个指针所指向的地址上存储的值可以修改。 38 | 39 | 2. **指向常量的指针** 40 | 41 | ```c 42 | const int *p 43 | ``` 44 | 45 | 先看 * 再看const,定义一个指针指向一个常量,不能通过指针来修改这个指针指向的值 46 | 47 | 改为 48 | 49 | 1. **指针常量** 50 | 51 | ```c 52 | int * const p 53 | ``` 54 | 55 | 先看const再看 * ,p是一个常量类型的指针,**不能修改这个指针的指向**,但是这个指针所指向的地址上存储的**值可以修改**。 56 | 57 | 2. **常量指针** 58 | 59 | ```c 60 | const int *p 61 | int const *p 62 | ``` 63 | 64 | 先看*再看const,定义一个指针指向一个常量,不能通过指针来修改这个指针**指向的值** 65 | 66 | 67 | 68 | ## ARM体系与架构 69 | 70 | ### 如何对绝对地址0x100000赋值? 71 | 原文: 72 | ```c 73 | (unsigned int*)0x100000 = 1234; 74 | ``` 75 | 改为: 76 | ```c 77 | *(unsigned int*)0x100000 = 1234; 78 | ``` 79 | 80 | -------------------------------------------------------------------------------- /知识点总结/名企最新面试真题.md: -------------------------------------------------------------------------------- 1 | # 不再提供md格式的源文件,需要完整文档的可以去公众号领取 2 | ![图片](https://user-images.githubusercontent.com/45563242/117952196-8330de80-b347-11eb-8d3b-4344cb5f7f9d.png) 3 | 4 | ## PDF获取方式 5 | 6 | 加我微信【LinuxDriverDev】,进技术交流群。 7 | 8 | ![](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/%E4%B8%AA%E4%BA%BA%E4%BA%8C%E7%BB%B4%E7%A0%81-%E7%BE%8E%E5%8C%96.png) 9 | 10 | 关注公众号【嵌入式与Linux那些事】,回复【offer】即可**获取最新版**。 11 | 12 | ![](https://github.com/ZhongYi-LinuxDriverDev/Picture/blob/main/Wechat/%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.png) 13 | -------------------------------------------------------------------------------- /知识点总结/操作系统.md: -------------------------------------------------------------------------------- 1 | # 不再提供md格式的源文件,需要完整文档的可以去公众号领取 2 | ![图片](https://user-images.githubusercontent.com/45563242/117952196-8330de80-b347-11eb-8d3b-4344cb5f7f9d.png) 3 | 4 | ## PDF获取方式 5 | 6 | 加我微信【LinuxDriverDev】,进技术交流群。 7 | 8 | ![](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/%E4%B8%AA%E4%BA%BA%E4%BA%8C%E7%BB%B4%E7%A0%81-%E7%BE%8E%E5%8C%96.png) 9 | 10 | 关注公众号【嵌入式与Linux那些事】,回复【offer】即可**获取最新版**。 11 | 12 | ![](https://github.com/ZhongYi-LinuxDriverDev/Picture/blob/main/Wechat/%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.png) 13 | -------------------------------------------------------------------------------- /知识点总结/数据结构与算法分析.md: -------------------------------------------------------------------------------- 1 | # 不再提供md格式的源文件,需要完整文档的可以去公众号领取 2 | ![图片](https://user-images.githubusercontent.com/45563242/117952196-8330de80-b347-11eb-8d3b-4344cb5f7f9d.png) 3 | ## PDF获取方式 4 | 5 | 加我微信【LinuxDriverDev】,进技术交流群。 6 | 7 | ![](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/%E4%B8%AA%E4%BA%BA%E4%BA%8C%E7%BB%B4%E7%A0%81-%E7%BE%8E%E5%8C%96.png) 8 | 9 | 关注公众号【嵌入式与Linux那些事】,回复【offer】即可**获取最新版**。 10 | 11 | ![](https://github.com/ZhongYi-LinuxDriverDev/Picture/blob/main/Wechat/%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.png) 12 | -------------------------------------------------------------------------------- /知识点总结/网络编程.md: -------------------------------------------------------------------------------- 1 | # 不再提供md格式的源文件,需要完整文档的可以去公众号领取 2 | ![图片](https://user-images.githubusercontent.com/45563242/117952196-8330de80-b347-11eb-8d3b-4344cb5f7f9d.png) 3 | 4 | ## PDF获取方式 5 | 6 | 加我微信【LinuxDriverDev】,进技术交流群。 7 | 8 | ![](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/%E4%B8%AA%E4%BA%BA%E4%BA%8C%E7%BB%B4%E7%A0%81-%E7%BE%8E%E5%8C%96.png) 9 | 10 | 关注公众号【嵌入式与Linux那些事】,回复【offer】即可**获取最新版**。 11 | 12 | ![](https://github.com/ZhongYi-LinuxDriverDev/Picture/blob/main/Wechat/%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.png) 13 | -------------------------------------------------------------------------------- /秋招面经总结/oppo和海康嵌入式软件工程师面经分享.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 哈喽,大家好。分享下春招面试的两家公司。海康和oppo是三月初的时候投递的,虽然,秋招已经签了。但是,我还是想充分利用下应届生的身份,搏一搏更大的公司和更高的待遇。 6 | 7 | 海康缺口比较大,一直在招人。oppo春招不像秋招那样,卡简历卡的那么严格,普通学校的学生也有了很大的机会。 8 | 9 | 两家公司的面试都不太难,问题都是提前准备到的。所以,笔试面试的一些八股文,该背还是要背的。毕竟,面试的时候,答不上来等于不会。 10 | 11 | 八股文的内容,可以看下这篇文章[嵌入式软件工程师笔试面试指南-C/C++](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&tempkey=MTEwOV9aVTlzZGlGTFoxZE0yNVVUeUdVTDg1a2RmZENlbm1rUUR6blFjVklOYlRLbXVqMHo0cktROFJueGJoZ2gta0IzLWZETkhjMnJFdWRiTWZlRmkwUjhobkp3VzNOTjhvVUt5VE1BeGhyTzdOSmdqUTFuZ2o0MjItVlNhNHk2cWRNVWVjWE5RdDJWcFExNU81emNXYVU4NklsNTVBOERjNGFpMHpUN1FRfn4%3D&chksm=406024ec7717adfafd23abbda8dd208fb8ee64bdf0443a257fefc0d41a269f429f7d7971e037&__mpa_temp_link_flag=1&token=2014296941#rd)。所有关于笔试面试的内容,我都会同步在github(https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview)上,**大家可以star下**,以免错过更新。大家如果想提前准备的,可以加我好友,我会把旧版本先给你。 12 | 13 | 14 | 15 | ## 海康 16 | 17 | ### 一面(3.23,35min) 18 | 19 | #### 自我介绍 20 | 21 | #### 项目介绍 22 | 23 | #### 你做的这个项目遇到了那些问题,如何解决的? 24 | 25 | #### 移植uboot,只做了移植吗? 26 | 27 | #### 用的那个文件系统? 28 | 29 | #### 移植过程中,网卡驱动做了那些工作? 30 | 31 | #### 写过那些驱动,讲一个你熟悉的? 32 | 33 | #### 写驱动过程中,遇到过什么问题,如何解决的? 34 | 35 | #### 对网络设备驱动有了解吗? 36 | 37 | #### 你有什么想问我的? 38 | 39 | ### HR面(3.30,25min) 40 | 41 | #### 自我介绍 42 | 43 | #### 作为北方人,你对南方的饮食,气候习惯吗? 44 | 45 | #### 为什么写博客? 46 | 47 | #### 读研也挺忙的,写博客不会影响你日常工作吗? 48 | 49 | #### 团队协作能力怎么样?举个例子? 50 | 51 | #### 周围的人是如何评价你的? 52 | 53 | #### 三个词概括你自己 54 | 55 | ### 签约答疑(4.9,30min) 56 | 57 | 4.9号下午2点,腾讯会议,HR主要介绍海康的主营业务,福利待遇,晋升通道,公司文化等各个方面。 58 | 59 | 当天下午六点,另一个负责薪资的HR打电话告知了薪资。待遇不满意,拒了。 60 | 61 | ## OPPO 62 | 63 | ### 一面(4.2,20min) 64 | 65 | #### 自我介绍 66 | 67 | #### 三个项目,问的很详细 68 | 69 | #### SPI是什么?有几条线?几种模式? 70 | 71 | #### 使用IO模拟过SPI吗? 72 | 73 | #### 堆和栈有什么区别? 74 | 75 | #### 调用函数时,有那些内容需要压栈? 76 | 77 | #### 有什么要问我的? 78 | 79 | 4.4号打来电话,告知一面通过,清明节后安排二面。 80 | 81 | ### 二面(4.9,40min) 82 | 83 | #### 自我介绍 84 | 85 | #### 项目 86 | 87 | #### uboot启动流程 88 | 89 | #### uboot启动前还需要做那些事情? 90 | 91 | #### uboot启动时使用的是物理地址还是虚拟地址?MMU要开启吗? 92 | 93 | #### x86汇编和Arm汇编有什么区别? 94 | 95 | #### 介绍一个你熟悉的驱动程序 96 | 97 | #### 操作系统学过吗?自旋锁和信号量有什么区别? 98 | 99 | #### Linux系统的启动流程 100 | 101 | #### 学过那些专业课,哪些学的比较好? 102 | 103 | #### 你有什么想问我的? 104 | 105 | ### 三面(4.12,15min) 106 | 107 | #### 自我介绍 108 | 109 | #### HR介绍部门 110 | 111 | #### 和那个公司签约了? 112 | 113 | #### 对工作地有什么要求? 114 | 115 | #### 你有什么想问我的? 116 | 117 | ### Offer 118 | 119 | 4.15收到录用排序的通知,4.20发下正式offer。影像部门,在深圳,C/C++岗位,工作内容主要是相机驱动,图像调测等,进去后随机分岗。 120 | 121 | oppo软工和影像加班是真的多,11点后下班是常态,每周六天,每年强制淘汰5%。薪资待遇给的白菜价,而且,没有argue的余地。综合各个方面考虑,拒绝了。 122 | 123 | ## 总结 124 | 125 | 春招到四月底了,基本算结束了。我应该也不会再面了。本来,还挺想去紫光展锐天津的。但是,由于秋招的时候拒绝了紫光展锐,春招时,紫光展锐直接不给机会了。 126 | 127 | 对于笔试面试,做个简单总结吧。更详细的内容,可以到github查看笔试面试的一系列内容。(**点击阅读原文可以直达**) 128 | 129 | 1. **扎实基础,准备好八股文**。面试的重点,主要是**基础知识**和**综合素质**的考察。 130 | 131 | 2. **简历重点突出**。简历上的内容,一定把你想要面试官问的内容放在一眼可以看到的地方。要对写在简历上的每一个字负责。可以适当吹牛,但是,你要保证可以自圆其说。 132 | 133 | 3. **心态**。无论是秋招,还是春招,心态一定要调整好。像我本硕都是双非的,简历投出去没消息,被刷掉很正常。被大公司刷了KPI也很正常。 134 | 135 | 4. **多投简历,充分利用等待期**,不要在一棵树上吊死。投完简历,简历并不一定会被及时处理,中间还有很长的等待期,可以利用这段时间面试其他的公司,让自己保持在一个很好的面试状态。 136 | 137 | 5. **及时跟进,及时反馈**。一般来讲,面试结果一周内都会给到。如果在面试完一周后没有任何消息,可以尝试给负责的HR打电话询问具体情况。 138 | 139 | ## 碎碎念 140 | 141 | 交流群的人越来越多了,群里交流氛围也不错。最近,在群里,群友还发现了致富门路,哈哈。 142 | 143 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//%E8%87%B4%E5%AF%8C%E9%97%A8%E8%B7%AF.png) 144 | 145 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//%E5%8F%91%E7%BA%A2%E5%8C%85.png) 146 | 147 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//%E7%BA%A2%E5%8C%85%E5%A5%96%E5%8A%B1.png) 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | -------------------------------------------------------------------------------- /秋招面经总结/readme.md: -------------------------------------------------------------------------------- 1 | > 哈喽,各位小伙伴好,应大家需求。我整理了一个**面经模版**,大家可以记录自己的秋招经历,在github上向我**提交issues**。我会把大家提交的issues同步到本仓库中,希望这个仓库可以帮助到更多的人!祝愿大家offer多多,钱多多,跳槽薪资double! 2 | 3 | > **issues 命名:** 2022届秋招-xxx公司面经总结,2022届春招-xxx公司面经总结,社招-xxx公司面经总结。 4 | 若有多个公司,可命名为:2022届秋招-xxx,xxx等5家公司公司面经总结。 5 | 6 | > 以下是正文内容 7 | 8 | # 公司名称 9 | ## 一面(日期,面试时长) 10 | 比如,一面(2021年6月7日,35min) 11 | ### 问题一 12 | 最好写一个参考答案 13 | ### 问题二 14 | ### 问题三 15 | ## 二面(日期,面试时长) 16 | ### 问题一 17 | ### 问题二 18 | ## HR面(日期,面试时长) 19 | ### 问题一 20 | ### 问题二 21 | ## 总结 22 | 简单总结下面试的过程,有哪些收获,有哪些不足。 23 | 24 | **注意:不按照格式提交的,一律不采纳!** 25 | 26 | **注意:不按照格式提交的,一律不采纳!** 27 | 28 | **注意:不按照格式提交的,一律不采纳!** 29 | 30 | issues 提交链接:https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/issues 31 | 32 | # 如果你不会写markdown,可以直接复制下面的内容来进行填充! 33 | 34 | ```c 35 | # 公司名称 36 | ## 一面(日期,面试时长) 37 | 比如,一面(2021年6月7日,35min) 38 | ### 问题一 39 | 最好写一个参考答案 40 | ### 问题二 41 | ### 问题三 42 | ## 二面(日期,面试时长) 43 | ### 问题一 44 | ### 问题二 45 | ## HR面(日期,面试时长) 46 | ### 问题一 47 | ### 问题二 48 | ## 总结 49 | 简单总结下面试的过程,有哪些收获,有哪些不足。 50 | ``` 51 | 52 | -------------------------------------------------------------------------------- /秋招面经总结/个人二维码-美化.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/1e70af9048f15ad9b1b1384b1f52aa9973298bdc/秋招面经总结/个人二维码-美化.png -------------------------------------------------------------------------------- /秋招面经总结/公众号二维码.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/1e70af9048f15ad9b1b1384b1f52aa9973298bdc/秋招面经总结/公众号二维码.png -------------------------------------------------------------------------------- /秋招面经总结/嵌入式软件工程师的秋招之路.md: -------------------------------------------------------------------------------- 1 | 2 | # 嵌入式软件工程师的秋招之路 3 | 4 | > 秋招是每个在校学生都要经历的一个阶段。本篇文章记录了自己的秋招历程。秋招投递公司23家,简历被刷1家。笔试/测评挂掉3家。至今无消息的8家。获得Offer的公司有小米,兆易创新,全志科技,浙江大华,海格通信,京信通信,景嘉微电子,广州朗国电子,北京华大电子,中国长城科技集团。最后收获了一个满意的Offer。前事不忘,后事之师。希望自己总结的这些内容能对后面准备秋招的同学有所帮助! 5 | 本文首发于[一个普通应届生的2020秋招总结](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247483904&idx=1&sn=4e829f7e0b08750f1b83acd016154388&chksm=c0602ee9f717a7ff4d560b7023fc5971d864ea30646f762d95d71738344d99e3e85759325541&token=86324414&lang=zh_CN#rd) 6 | ## 1. 自我介绍 7 | 8 |   本硕双非,本科电子信息工程,硕士电子与通信工程。导师申请的项目中有一部分需要用Stm32实现,所以自己在硕士期间接触Stm32比较多。当时也考虑到,如果只会Stm32,找工作可能会比较吃力。而自己对嵌入式底层的内容也比较感兴趣。所以,在研二的时候每天花一点时间来学习下驱动开发,以后找工作打算从事底层驱动开发相关的内容。 9 | 10 | ## 2. 秋招准备 11 | 12 | ### 2.1 Linux驱动 13 | 14 |   在2019年12月的时候,基本就把韦东山老师的第二期课程学习了一遍了,虽然在学习过程中有很多不明白的,但也坚持看了一遍。把有疑问的地方记录了下来,打算后面再慢慢的去深入研究。 15 | 16 |   韦东山老师讲的课程确实很好,但是对于基础不太好的可能会比较吃力,很容易劝退。当时思考了下,**自己为什么听不懂呢,哪里有欠缺**?我们对自己应该有一个清晰的认识,我从Stm32转驱动开发,优势就是我对于基本的硬件原理都比较熟悉,欠缺的是对于Arm架构的深入了解,操作系统和计算机组成原理的基本知识。所以,这个时候发现自己听不懂的情况下,有些问题搞不明白,先不要深究,后面可以慢慢补。 17 | 18 |   今年疫情在家,在3月份的时候,对照自己之前的学习笔记和遗留的疑问,把之前学过的内容又看了下,当看第二遍的时候,对于很多问题也可以想清楚了。 19 | 20 |   考虑到驱动这块没有做过具体的项目,我就对照着韦东山老师的移植Uboot的视频,自己移植了一遍。([S3C2440移植uboot之编译烧写uboot](https://blog.csdn.net/qq_16933601/article/details/105656647))自己对于Uboot的启动流程也就很熟悉了。[超详细分析Bootloader(Uboot)到内核的启动流程(万字长文!)](https://blog.csdn.net/qq_16933601/article/details/106244510)既然打算把这个写在简历上,就要把这个启动流程搞得特别明白,有些基本的源码也是要知道的(比如,如何初始化NAND FLASH,时钟如何配置的)。而且,写在简历上的面试官一定会问的。 21 | 22 | ### 2.2 Arm体系与架构 23 | 24 |   关于Arm的体系架构这部分是一定要看的。推荐一本书,杜春雷老师写的《**ARM体系结构与编程**》,这本书其实就是ARMV7开发手册的中文版,很多内容都是手册里面的。书的话不一定都要看,学习过程中,哪里不了解再去查书,效果可能会更好。 25 | 26 | 27 | ### 2.3 数据结构与算法分析 28 | 29 |   数据结构与算法的内容时秋招中的重中之重,**笔试必考,面试必考**。所以这部分要好好准备。 30 | 31 |   数据结构的话本科也没学过。4月份的时候开始在家,从基本的链表,二叉树,堆,队列,字符串,排序算法,查找算法等基础内容学起。当时参考的资料是在网上找的一本PDF。里面包含了基本数据结构的算法的实现。对着PDF资料边看边理解,自己动手去实现了一遍。刚开始学习数据结构的内容,一定要多画图,像链表的内容,不画图有时候可能不太好理解指针是如何指向的。总之要找到适合自己的学习方式。 32 | 33 | >图论的内容比较难,如果不打比赛,可以直接跳过(只针对嵌入式开发的同学)。还有字符串的KMP算法也比较难理解(其实刷题Leetcode题目之后就会发现,字符串匹配的题目解法很多,不一定要KMP)。也可以先不看。 34 | 35 |   关于我写的一些数据结构的内容,可以在数据结构与算法分析专栏中看到。大家可以参考下。 36 | 37 |   此外我还整理了下数据结构中比较重要的内容,在面试中一定要达到可以在白纸上写的水平。具体如下图所示。 38 | 39 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/58a5bd24bbe55ce29fd7e856ef5061c0.png) 40 | 41 | > 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 42 | 本文链接:https://blog.csdn.net/qq_16933601/article/details/111278570 43 | 44 |   在学习完基本的数据结构与算法的内容之后,接下来就是刷题了。我自己是在Leetcode上刷的题目。由于时间有限,我刷题一开始的策略是按照 **题目类型** 去刷题(参考了知乎各位大佬的刷题策略),主要内容集中在了链表,二叉树,字符串,数组这四个部分。把这部几个部分出现频率高的题目都总结了出来。各个部分频率总结链接: 45 | 46 |   [【leetcode】高频题目整理_所有题目汇总篇( High Frequency Problems, All Problems )](https://blog.csdn.net/qq_16933601/article/details/108913658) 47 | 48 |   [面试leetcode题型总结](https://zhuanlan.zhihu.com/p/158977583?utm_source=qq&utm_medium=social&utm_oi=805166261268004864) 49 | 50 |   刷题过程中会遇到一些特定算法的题目,比如滑动窗口,双指针,动态规划等。遇到这种题目,能解决的先解决掉,不能解决的后面可以按照**算法类型**统一解决。 51 | 52 |   最后,在笔试的时候,很多公司的大题的笔试系统其实并不是像Leetcode一样只写个子函数就行了,而是和ACM竞赛的类型一样,需要自己处理输入输出。**这部分一定要提前练习**。如果不熟悉系统,笔试的时候虽然有思路,但是也写不出来。建议提前熟悉下输入输出。 53 | 54 |   [OJ在线编程常见输入输出练习场](https://ac.nowcoder.com/acm/contest/5650) 55 | 56 | 57 | ### 2.4 C语言 58 | 59 |   C语言这部分的话,可以上网搜索一些面试中经常问到的内容。这里也推荐一本书,何昊老师写的《**程序员面试笔试宝典第三版**》(不要找错了)。这本书是针对C/C++程序员的,主要介绍了面试过程中经常问到的问题,整体的内容偏向底层,问题解释的也比较清楚。但是有些地方有错误,看的时候要注意。可以加书后面的QQ群,向作者反馈错误。 60 | 61 |   C++语言,平常用得少,我这部分就没准备,给不了大家意见。在面试中好几次问到我C++的指针引用之类的基础知识,只能和面试官说C++内容用得少,不熟悉。不过,这并不会成为面试官最后是否要你的决定性因素(只针对嵌入式底层来说)。 62 | 63 | ### 2.5 操作系统&计组 64 | 65 |   这块是我的软肋,好多概念不太懂。不过在学习驱动的过程中,我把这些概念也都整理了一些。具体文章可以看下面的内容。 66 | 67 |   [你真的懂Linux内核中的阻塞和异步通知机制吗?(花了五天整理,墙裂推荐!)](https://blog.csdn.net/qq_16933601/article/details/106579488) 68 | 69 |   [面试官让你讲讲Linux内核的竞争与并发,你该如何回答?](https://blog.csdn.net/qq_16933601/article/details/106579474) 70 | 71 |   [S3C2410 MMU(存储器管理单元)详述](https://blog.csdn.net/qq_16933601/article/details/107217052) 72 | 73 |   [Linux内核中断顶半部和底半部的理解](https://blog.csdn.net/qq_16933601/article/details/107239908) 74 | 75 |   [谈谈进程上下文、中断上下文及原子上下文的一些概念](https://blog.csdn.net/qq_16933601/article/details/107305828) 76 | 77 |   关于操作系统的一些知识,同样是整理了网上常见的一些面试题目。这份嵌入式软件开发知识点总结一共有13W字,涵盖了Linux,C语言,Arm体系与架构,操作系统,计算机组成原理等方方面面的知识。我在秋招过程中问到的问题,在里面基本都可以找到。这份资料给了我很大帮助。 78 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/b372ee40fe9252e1cf3ec26beeb5b669.png) 79 | 80 | ### 2.6 项目经验 81 | 82 |   如果自己做过一些项目的话,建议写两到三个自己做过的项目,主要从以下几个方面介绍: 83 | 84 |   **项目名称**:基于XXX的XXX 85 | 86 |   **个人角色**:项目负责人/模块负责人 87 | 88 |   **起止时间**:2020.3~2020.6 89 | 90 |   **项目描述**:主要介绍项目主要内容,4句话即可。 91 | 92 |   **编程语言和环境**:gcc3.4.2,Ubuntu16.04,S3C2440开发板 93 | 94 |   **负责事宜**:写自己做了哪些内容,第一,XXXX;第二,XXXX;第三,XXX; 95 | 96 |   如果没有做过项目,可以去找一些开源的项目做一下(韦东山老师第三期的视频中有相关项目的介绍),比如移植Uboot,数码相框等(**韦老师最新的IMX6ULL开发板已经有了更加高大上的项目,也可以写在简历中**)。但是不要找那种烂大街的,比如XXX管理系统,五子棋,贪吃蛇。说实话,这些东西再怎么做,一听这个名字面试官就会没兴趣了。 97 | 98 |   我们也可以适当“包装”自己的项目,我这个项目是导师申请的国家自然科学基金项目(或者XX省科技重大专项)的一部分,这个项目主要是完成XX技术的攻关。我这个项目是和XX部队(XX高校)合作的项目,我们负责XX部分。这么一写的话“档次”是不是就上去了呢?**但是这里不是让大家在简历中去造假,在简历中造假是不能接受的,这是一个人基本的道德底线!** 99 | 100 |   自己写上去的项目一定要搞清楚,弄得明明白白。有好几次面试中,面试官让我讲你做的这个东西原理是什么。由于原理比较复杂,所以面试中,我都是边画图边讲,涉及到的公式还要进行推导,为什么这样做,都得给面试官讲清楚。**如果他没有听懂,那就是我们没有讲清楚**。 101 | 102 |   说了这么多,其实主要就是弄清楚这几个问题:**为什么做这个项目?一共几个人做?你是什么角色?你做了哪些部分?你认为最难得地方是什么?如何解决的?最后收获是什么?**。 103 | 104 |   事实上,我们所做的东西是什么,面试官并不太在意,毕竟公司做的东西比我们要复杂的多,对比公司的产品来说,我们的简直太low了,我们所做的可能只是个“玩具”而已。面试官主要考察的就是项目的**真实性**和我们的**表达能力**。 105 | 106 |   也可以参考下其他人整理的 107 |   [如何在面试中介绍自己的项目经验](https://blog.csdn.net/qq_16933601/article/details/110875518) 108 | 109 | ### 2.7 其他 110 | 111 |   至于其他内容,主要有以下几个方面吧。 112 | 113 | **1.不要放过任何一次和面试官聊天的机会(发哥和我说的,受益匪浅)。** 114 | 115 | > 今年疫情在家的时候,请教了发哥关于校招找一份什么样的工作,嵌入式软件工程师的职业规划等问题,非常感谢发哥在晚上十点多手打了1000多字解答我的疑惑。特别强调了,在校生要抓住校招的机会,提前准备,多和面试官聊聊天。和发哥聊完后自己对于整个行业有了更清楚的认识,谢谢发哥! 116 | 117 |   **多面试!多面试!多面试!重要的话说三遍**!看到有合适的公司要尽早投递,不要到后面没有HC了。 118 | 119 |   比如我投递华为是在9.10号。笔试在9.14。虽然笔试过了,测评也过了。但是这个时候其实有点晚了(也可能和投递的部门有关系)。部门的HR和我说,他们第一批的面试已经结束了,领导要求这段时间要形成闭环。第二批还会有一些HC,但是在10月之后了,而且名额也不会太多了。相反,投递其他部门的同学,在9.19-9.24这周都收到了面试通知。 120 | 121 |   其刚开始前几次面试肯定会有些紧张,不知所措。但是当你面了三五场之后,你就会发现,面试官问的东西都是差不多的。我在9月中下旬,最多的一天面了4场。有句话说得好,**吹牛X吹多了,后面也就很自然了**。 122 | 123 | **2.回答问题一定要有逻辑性!先抛出结论,再分要点回答。** 124 | 125 |   比如,面试官问你平常你是如何学习专业知识的?以什么样的方式? 126 | 127 |   答:**学习的形式主要分为两种**:**一种是在学习的过程中解决疑问,以解决问题为导向**。比如,在移植Uboot的过程中,我会想到为什么要关闭I-Cache,D-Cache等,关闭中断等(这里可以抛出这些问题,以防后面会问),遇到这些问题我就会记录下来,然后上网去查资料。在解决这些问题的过程中,可能会遇到其他的问题,继续查找相关资料,直到最后都搞清了。**第二种就是系统的学习**,如果有比较充足的时间,我会去拿着像Arm体系和架构,深入理解计算机系统这些书去一点一点的读。去理解这些内容。**以上就是我日常的一个学习方式。** 128 | 129 | **3.自我介绍。** 130 | 131 |   自我介绍是面试中必不可少的部分。面试官一般会利用自我介绍的时间来浏览下你的简历。建议准备一个**一分钟的自我介绍和三分钟的自我介绍**。我在面试小米的时候,面试官直接打断我,说自我介绍简单一点,要不后面没有时间写代码了。 132 | 133 |   我的自我介绍主要是三部分,**第一部分**是开场白,名字,学校,专业,应聘岗位,应聘该岗位的原因。**第二部分**是项目经验的简单介绍,这里一定要简洁,主要说下自己做了那些东西。**第三部分**是学习能力的介绍,**这部分是为了抛出自己写博客的情况,有技术博客并且博客的内容比较充实的话,在面试中确实是个加分项**。 134 | 135 | **4.简历填写** 136 | 137 |   投递简历时常常需要在各个网站填写自己的个人信息。建议使用如下工具,可以方便的在各个网站自动识别填充所需内容。当然,也有许多识别不了的。这种就没办法了。当然,如果大家有其他工具也可以推荐! 138 | 139 |   [牛客简历助手](https://www.nowcoder.com/quick-fill/show-edit#form) 140 | 141 | **5.最后要知道一些知识** 142 | 143 |   链接如下 144 |   [Offer,三方,两方,毁约 这些你需要知道的事](https://www.nowcoder.com/discuss/144015) 145 | 146 | ## 3. 书籍推荐 147 | 148 | ### C语言 149 | 150 |   **C Primer Plus**,C缺陷和陷阱,**C和指针**,C专家编程 151 | 152 | ### 数据结构 153 | 154 |   **大话数据结构**,数据结构与算法描述-C语言描述。 155 | 156 | ### 硬件原理 157 | 158 |   **Arm体系结构与编程**,Armv7/Armv9数据手册。 159 | 160 | ### Linux驱动 161 | 162 |   **嵌入式Linux应用开发完全手册**,Linux设备驱动开发详解,Linux设备驱动程序 163 | 164 | ### Linux应用编程 165 | 166 |   **Unix环境高级编程**,Unix环境网络编程 167 | 168 | ### 计算机基础 169 | 170 |   **深入理解计算机系统**,**现代操作系统**,计算机组成与设计:硬件软件接口,计算机体系结构:量化研究方法 171 | 172 | ### Linux内核 173 | 174 |   Linux内核完全注释(麻雀虽小五脏俱全),Linux内核设计与实现,**Linux内核源代码情景分析** 175 | 176 |   以上书籍加粗的为重点推荐。如果时间不充裕,可以当作工具书来查询。当然,有时间还是建议认真读下。 177 | 178 | > 需要电子书的可以在公众号【嵌入式与Linux那些事】回复“电子书”领取,或者点击右下角加QQ群,群里也有整理的相关资料。 179 | 180 | ## 4. 未来展望 181 | 182 |   1.接下来的时间准备下大论文的内容,之前投的第二篇小论文有了审稿意见,只是没改而已,今年过年之前投出去吧。保证自己顺利毕业! 183 | 184 |   2.补充下操作系统和计算机组成原理的知识。主要看下《深入理解计算机系统》 《现代操作系统》这两本书把,每周把看过的东西总结下,照常输出一篇博客。这部分是最主要的内容,把基础打扎实了。 185 | 186 |   3.操作系统和计算机组成原理的知识形成博客专栏,坚持! 187 | 188 |   4.坚持锻炼身体,每周视天气情况而定,跑步2~3次,周末打打球。 189 | 190 |   5.期待入职大华,即将开启一段新的旅程,充满了未知和挑战,要继续加油鸭! 191 | 192 | ## 5. 总结 193 | 194 |   秋招结束了,今年感觉好难,好多公司缩招。在九月初有段时间,心情很低落,一直在怀疑自己。特别是投递简历后,漫长的等待。每天都会查看好几遍邮箱,生怕错过了重要的通知。心情不好的时候,我就会去操场边听音乐边跑步,特别喜欢大汗淋漓的感觉。跑完之后整个人的精神状态会好很多。调整好心态,继续看面经,刷题,总结基础知识! 195 | 196 |   综合考虑了下,最后选择了浙江大华。自己也询问了在里面的师兄师姐,他们说还可以,加班的话没有网上说的那么可怕。自己提前做完的话,是可以走的。而且组内打个招呼,有急事也可以请假。加班一般到八点半,对于自己来说其实也可以接受(现在不加班的公司太少了)。至于双休的话,是看部门,不忙的话双休都有,忙的话大小周休息。个人还算比较满意。 197 | 198 | 199 | 200 | ## 6. 致谢 201 | 202 |   刚开始拿到Offer后不知道该如何抉择,父母那边倒是没有太大的问题,说哪里工作合适就去哪里。很感谢我的父母可以支持我。当时咨询了发哥,逸珺哥,平哥,朱老师,豆豆姐等,还有在投递简历前也请教了下肖遥哥。非常感谢这些前辈能给我建议! 203 | 204 |   2020年疫情在家期间,自己对于找一份什么样的工作并没有明确的规划。于是咨询了发哥关于校招,职业发展的问题。发哥大晚上的手打了1000多字回复我,特别强调要重视校招,**多和面试官聊天**,把握机会。在职业发展规划上,发哥向我介绍了底层驱动是做什么的,在不同的公司扮演什么角色,以及未来的晋升通道等。应聘的时候,要**多些自信**,努力把握好人生的选择点,在没有做选择前,**不要把话说死,把方向定死**。很多校招企业更看重的是**可培养性**,进入企业后都是按照一张白纸来培养的。([写代码的篮球球痴](https://blog.csdn.net/weiqifa0)) 205 | 206 |   投简历前,咨询了下肖遥哥在校招中是选择岗位还是选择公司的问题。肖遥哥说,**岗位重要**,再好的公司如果做的不是你喜欢的擅长的,那么你可能在这家公司也不会长久,不管做那个方向,做那个行业,还是在一个方面要**专注,坚持**。([李逍遥](https://blog.csdn.net/u012846795)) 207 | 208 | 209 | 210 | 211 | 212 |   在选择Offer的时候也咨询了下逸珺哥,待遇差不多的情况下,考虑公司发展前景以及地域,但要优先考虑**公司行业以及前景**。也要考虑以后**定居**等问题,比如是否能落户,这个和以后孩子的教育也有些关系。但是要找到**兴趣,待遇,地点**等各方面都能满足的工作还是有点难度的。([嵌入式客栈](https://blog.csdn.net/msc1211)) 213 | 214 | 215 | 216 |   小平哥说,要注意下你**应聘的职位和你进去从事的工作内容**是否是一样的。在公司如果从事的方向正好是公司的主要业务,你会学到更多的东西。考虑定居的问题,是干几年回老家,还是找个宜居的城市呢?一线城市的压力是会大一点,但是机会也会多一点。如果回老家或者周边,公司的规模和待遇等就会比一线城市差一点。([txp玩Linux](https://blog.csdn.net/Dada_ping)) 217 | 218 | 219 | 220 |   朱老师说,你担心的地域问题和年龄问题都不是事,完全可以干几年再跳走。而且,**你要相信个人机缘就是最好的安排**。这种问题没有标准答案,紫光存在不确定性,对于目前的来说,还是先**落袋为安**吧。杭州也是个不错的城市,工作机会也比较多,完全可以支持你未来三到五年的发展。芯片原厂也不一定是最好的,第一份工作只要在**质量上没有问题**,后面还是容易跳槽的。 221 | 222 |   豆豆姐,第一份工作,跟对人很重要。大公司有成熟的培养体系。刚开始工作,左右对比也很正常。工作本身,**无论哪个岗位都能历练自己。不是赚到,就是学到,关乎己心**。**工作无非也是借境修心**。自己私下仔细一想,不管是工作还是生活,确实是这么个道理,很赞! 223 | 224 |   下一篇文章将会分享小米,兆易创新等公司的面经总结,欢迎关注我的博客,第一时间获取更新。 225 | 226 |   **养成习惯,先赞后看!如果觉得写的不错,欢迎关注,点赞,在看,谢谢**! 227 | -------------------------------------------------------------------------------- /秋招面经总结/联发科华为小米等20家公司面经总结.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 嵌入式软件工程师面试经验总结(附送秋招大礼包) 4 | 本文首发于[2020秋招联发科小米等面经分享](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247483909&idx=1&sn=a4e866f897a581e8e91389b2d9b412b6&chksm=c0602eecf717a7fa5b962c89cb9618af398c9f7a6ccc1859c724f02403b807ef81af8cf5aab3&token=86324414&lang=zh_CN#rd) 5 | 6 | > 秋招投递公司23家,简历被刷1家。笔试/测评挂掉3家。至今无消息的8家。获得Offer的公司有小米,兆易创新,全志科技,浙江大华,海格通信,京信通信,景嘉微电子,广州朗国电子,北京华大电子,中国长城科技集团。 7 |   友情提示:公司名字后面的日期代表投递日期,面试批次后面的时间代表面试时长和面试日期。 8 | 9 | ## 有面试 10 | 11 | ### 联发科北京(7.16) 12 | 13 |   20200805接到通知,0806早上九点半面试。邮件中写的是用Webex Meet,之前都没听过的一个软件,网上找了半天才找到,而且软件没有简体,只好调成繁体了。邮件中写的是等待通知后再连入,大概9.40的时候接到了电话,要我加入会议中。 14 | 面试官是个女的,首先让我自我介绍下,然后开始看我的简历。介绍完了直接问项目。 15 | 16 | #### 一面(35min,8.5) 17 | 18 | > 你自己做了那部分?是不是在师兄师姐基础上做的? 19 | 20 |   不是,师兄师姐之前主要做的是理论研究。我本人所做的是硬件的设计和软件代码的移植。 21 | 22 | > 移植的开源代码,做了那些修改?如何修改的? 23 | 24 |   主要修改的是硬件的管脚,时钟的配置,SPI总线的调试,芯片通信过程的调试。 25 | 26 | > 上位机部分你说用了卡尔曼滤波,有没有调研过其他的滤波方式? 27 | 28 |   没有考虑,当时请教了也做这个方向的一些人,他们给的建议就是用卡尔曼就可以。没有考虑其他方式。(其实最主要的是解决问题,能解决问题就可以) 29 | 30 |   复盘:当时想到的第一个就是卡尔曼,因为卡尔曼在实际工程中应用比较广泛且成熟,效果也不错。当时就拿来试了下,定位精度得到了很好的提升。(定位漂移和抖动40cm左右。漂移和抖动的主要原因就是每次接收到的不止是多个信号叠加的结果,卡尔曼滤波主要是滤除除了首径信号以外的其他信号) 31 | 32 | > 做的东西效果怎么样?和其他人做的对标了吗? 33 | 34 |   定位效果还可以,每秒钟可以定位64个标签。 35 | 36 |   复盘:业界的评判标准主要有几个方面。 37 | 38 | > 整个工程文件有多少行代码? 39 | 40 |   具体多少行不清楚,最后编译的hex文件为112k 41 | 42 | > 代码移植过程中遇到什么问题,如何解决的? 43 | 44 |   巴拉巴拉,通信过程有点复杂,估计面试官没听懂,就没往下问了(其实应该边画图边讲的)。 45 | 46 |   复盘:解决的整个过程应该描述的再详细一些,重点突出关键部分,这个问题的三个部分都要讲清楚! 47 | 48 | > 项目中实际写的代码量有多少 49 | 50 |   没多少,主要是硬件的设计和调试,软件的移植,解决问题,修改。 51 | 52 |   复盘:显然面试官嫌弃代码写少了,这个时候可以说微信小程序的代码自己写了很多,70%以上。从0到1. 53 | 54 | > 项目代码中多线程,多进程是如何运行的 55 | 56 |   没有用到多线程,多进程。 57 | 58 | > 汇编,C++掌握怎么样? 59 | 60 |   汇编自学过,可以看懂。C++基本没用过。 61 | 62 |   复盘:汇编是自学的,C++和C的语法差不多,都可以看懂。 63 | 64 | > 重写strcpy函数? 65 | 66 |   写完了给面试官解释了下。写对了 67 | 68 | > 将一个寄存器的第三位的值从0改成1 69 | 70 |   写完了给解释下。写对了 71 | 72 | > 你有什么想问我的? 73 | 74 |   如果我有幸能进入贵公司,驱动主要负责那部分? 75 | 76 | > 主要还是看你分到那个部门,camera,音视频,IO驱动都有在做的。 77 | 78 |   什么时候能给到面试结果的答复? 79 | 80 | > 不确定,要先把面试过程的记录交给HR。 81 | 82 | #### 总结 83 | 84 |   1.我项目上做的是软件+硬件的一个实现,面试官全程在问软件,硬件一点没问。 85 | 86 |   2.在简历中写了自己在写博客,放了一个链接,不知道面试官看没看。 87 | 88 |   3.面试的岗位是Linux驱动开发,全程没有问一点像bootloader,Linux内核的输入子系统,总线设备驱动模型等偏底层的东西。 89 | 90 |   4.女面试官可能都不太懂硬件?全程都是软件,而且自己的项目中写的代码不是太多,主要是修改。面试官还是侧重实际的写代码能力吧。感觉凉了。 91 | 92 |   5.全程35分钟吧。 93 | 94 |   6.总结下,项目考虑再深化下,如何讲解? 95 | 96 | 97 | ### 广州朗国电子科技(8.24) 98 | 99 | #### 一面(60min,9.14) 100 | 101 |   无领导小组讨论。没有标准答案,上网搜索下无领导小组讨论的注意事项,想好自己要扮演什么角色。但是一定不要不说话,要有逻辑的表达自己的观点。 102 | 103 | #### 二面(25min,9.16) 104 | 105 |   HR面,主要问了家庭情况,有没有女朋友,工作地点的问题,能不能接受加班,HR也很坦白的说,公司处在上升期。我们是标准的996。 106 | 107 | #### 三面(40min,9.18) 108 | 109 | > 项目 110 | 111 |   主要针对简历上写的内容来问,项目画原理图,流程图讲清楚,并进行公式推导。 112 | 113 | > 什么是内核空间?什么是用户空间 114 | 115 | > 内核空间和用户空间通信方式 116 | 117 | > 为什么需要uboot?不用行不行? 118 | 119 |   用uboot的目的是引导内核启动。 120 | 121 |   我理解的,理论是可以的。把uboot中所做的一些工作写进内核里,板子也能启动。但是很少有人这么做,毕竟内核很庞大,大面积修改难度比较大。 122 | 123 | > volatile关键字 124 | 125 | 126 | 127 | #### 总结 128 | 129 |   9.25号发来邮件,要先签两方协议。这家公司做Smart TV之类的显示设备的,安卓驱动和Linux驱动都有,也有嵌入式应用层的。零食甜点下午茶,10点以后打车报销,每个季度有奖金(0.5-1个月月薪),年终还有年终奖(据说可以拿到18薪),就是加班太多(据说996是标配,忙的时候9107),怕受不了。最后还是拒绝了。 130 | 131 | ### 浙江大华股份(9.3) 132 | 133 | #### 一面(30min,9.10) 134 | 135 |   2020.9.8号做完笔试,9.10下午突然打电话来问是否方便,做个电话面试。 136 | 137 | > 自我介绍 138 | 139 | > 笔试题的建议 140 | 141 |   笔试题好多关于C++的部分,个人是做嵌入式软件部分的(偏底层)。做起来C++部分有些吃力。希望笔试题可以分嵌入式上层和底层的部分。 142 | 143 | > 项目 144 | 145 |   问了好久,面试官对我做的项目很感兴趣。 146 | 147 | > static关键字 148 | 149 |   修饰变量的话,这个变量的作用域只是本函数,而且如果多次调用函数的话,这个变量只会被初始化一次。修饰函数的话,函数的作用域只是在本文件内。 150 | 151 | > Arm有几个寄存器?什么是CPSR,SPSR?什么时候用到? 152 | 153 |   37个寄存器。CPSR是当前程序状态寄存器,存储的是当前程序的状态,比如上下文的一些寄存器内容,程序运行的话就要用到CPSR。SPSR为备份的程序状态寄存器,主要是中断发生时用来存储CPSR的值的。 154 | 155 | > 字符设备有哪些?和块设备有什么区别?如何写一个字符设备驱动? 156 | 157 |   字符设备有键盘,鼠标等。字符设备和块设备的区别主要是访问方式不同,访问字符设备是以字符流的方式访问的,访问块设备是以块为单位,并且可以随机访问。 158 | 159 |   以一个LED驱动为例,先定义一个file_operations结构体,接着编写init函数,在init函数中完成对管脚的映射,register_chrdev字符设备的注册,class_create类的注册,class_device_create在类下面注册一个设备。exit函数中完成字符设备的卸载,类的卸载,内存空间的释放。在open函数中完成硬件管脚的初始化,在write函数中完成点灯操作。 160 | 161 | > Uboot启动过程说下? 162 | 163 |   没有难度。 164 | 165 | > 堆和栈的区别? 166 | 167 |   1.申请方式,栈的空间由操作系统自动分配,释放,堆上的空间手动分配,释放。2.申请大小,堆的可用空间比较大,栈的可用空间比较小,一般是2M。3.申请效率,栈申请速度比较慢,堆的申请速度比较快。 168 | 169 | > 为什么栈的空间不连续 170 | 171 |   不知道。 172 | 173 | > 通用学科,你喜欢那个,学得好的。 174 | 175 |   数学,英语。 176 | 177 | > 数学的那个分支比较感兴趣 178 | 179 |   矩阵理论。因为在许多问题的深入研究中,基本上50%以上的问题都会转化成矩阵来解决。所以这部分看的比较多。 180 | 181 | > 除了课本学的数学之外,自己私下有没有看其他的关于数学的内容 182 | 183 |   没有,自己看的比较多的是专业方面的书籍。 184 | 185 | > 专业课中,那个课学的比较好 186 | 187 |   C语言,操作系统,计算机组成原理,Arm体系和架构 188 | 189 | > 除了课堂上学的之外,某个领域有没有深耕,自己研究过,私下看过 190 | 191 |   Linux内核的源码,操作系统,计算机组成原理,私下都会去花时间去了解,学习 192 | 193 | > 如何学习的?以什么样的方式 194 | 195 |   我在学习Linux驱动的过程中,会想到一些问题,比如UBOOT的启动过程中为什么会关闭中断,关闭DCACHE,关闭MMU,关闭TLC等。遇到这些疑问我就会去查,解决问题的过程中会想到其他的一些问题,把这些问题记录下来,一一解决。 196 | 197 |   像Linux内核的话我最近再看一本书,赵炯老师写的Linux0.12源码剖析,这个书以Linux0.12内核为基础,详细介绍了内核的各个部分,虽然看起来比较吃力,但是我也在坚持阅读。 198 | 199 |   复盘:有条理更好。**学习的形式主要分为两种**:**一种是**在学习的过程中解决疑问,以解决问题为导向。比如,在移植UBOOT的过程中,我会想到为什么要关闭ICACHE,DCACHE等,关闭中断等(这里可以抛出这些问题,以防后面会问),遇到这些问题我就会记录下来,然后上网去查资料。在解决这些问题的过程中,可能会遇到其他的问题,继续查找相关资料,直到最后都搞清了。**第二**就是系统的学习,如果有比较充足的时间,我会去拿着像Arm体系和架构,操作系统,Linux源码剖析这些书去一点一点的读。去理解这些内容。**以上就是我平时的一个学习方式**。 200 | 201 | > C/C++那个更熟悉?做过开发吗? 202 | 203 |   C更熟悉,做过开发,3000行代码的经验。 204 | 205 | > Linux操作系统熟悉吗? 206 | 207 |   熟悉,常用的使用都是没问题的。 208 | 209 | > 平时有空了做什么 210 | 211 |   我会去学习一些新的知识,研究一些底层的东西,比如操作系统,计算机组成原理等。我到现在一直坚持的一个事情就是写博客。每周的话我都会把这周的疑问,这周学习的新的知识去做一个总结,每周都会要求自己去发布一篇博客,对本周的内容做一个总结。 212 | 213 |   复盘:有空的话我更多的时间还是投入到对于技术的学习中,在学习的过程中我会通过写博客的方式来输出自己的想法。每周我都会去坚持写一篇博客,博客的主要内容就是这周的学习的新知识以及遗留的疑问的解决。 214 | 215 | > 反问 216 | 217 |   这个算第一次面试吗?什么时候会得到这次面试的结果?下次面试是否会提前通知? 218 | 219 |   算第一次面试。结果的话这最近两三天会给到。因为人比较多,面试不会提前通知。 220 | 221 | ##### 总结 222 | 223 |   面试时间35min吧,整个面试过程还是很顺利的,问的问题基本都答了上来,唯一 一个关于栈的空间不连续的问题,确实是自己的知识盲区了,后面也补上了。 224 | 225 |   回想起来。有些问题应该想好再说,注意条理性,问你什么答什么,不要有废话。 226 | 227 | #### 二面(35min,9.12) 228 | 229 | > 自我介绍 230 | 231 | > 进程和线程的区别 232 | 233 |   1.进程是系统进行资源分配和调度的一个基本单位,线程是CPU调度和分配的基本单位。2.进程有自己的独立地址空间,线程是共享进程的内存空间的。3.进程切换的开销大,线程切换开销小。4.多线程程序只要有一个线程死掉,整个进程也跟着死掉了,多进程程序中的一个进程死掉并不会对另外一个进程造成影响。 234 | 235 | > 死循环有几种方式来写 236 | 237 |   for(;1;){},while(1){},do {} while(1); 238 | 239 | > 看你写的熟悉内核的总线设备驱动模型,讲解下。总线设备驱动模型和字符设备有什么区别? 240 | 241 |   总线设备驱动模型和字符设备驱动并不是一个平行的概念,总线设备驱动模型是在字符设备驱动模型的基础上套一个外壳,其实内部的驱动编写方式仍然和常规的字符设备驱动基本是一样的,这样做的目的为了隔离BSP和驱动,使得驱动具有更好的可扩展性。 242 | 243 | > Uboot如何引导内核启动的? 244 | 245 |   uboot引导内核启动主要向内核传递三个参数R0,R1,R2,第一个参数R0,默认为0。第二个参数,R1,CPU ID,告诉内核板载CPU的型号。第三个参数R2,告诉内核映像文件存在什么地方,板子还剩多少内存空间。这些参数的传递都是以tag_list的方式传递的。 246 | 247 | > 主要擅长的开发语言 248 | 249 |   C语言最擅长 250 | 251 | > 左值和右值 252 | 253 |   左值可写,右值可读。通常,左值可以作为右值,但是右值不一定是左值。 254 | 255 | > 数组名和指针区别 256 | 257 |   数组名对应的是一块内存的地址,指针是指向一块内存地址。数组名对应的内存地址不可以修改,指针指向的内存地址可以修改,更加灵活。数组存放的是数据内容,指针存储的是地址。 258 | 259 | > 平常像C++,python这种语言有涉及吗 260 | 261 |   C++能看懂,会改。自己独立写一个大程序的话不太行。汇编的话是自己学过的,能看懂,会改。python语言没有涉及到。JS/HTML/CSS这些前端的语言是自己在项目中实际用过的,使用没问题。 262 | 263 |   复盘:先抛出结论,C++ 汇编 JS/HTML/CSS这是我会的语言。然后再描述。 264 | 265 | > 之前做的项目都是偏底层的实现,对吧。 266 | 267 |   不是。能称得上是底层的就是第二个项目吧,移植uboot2012到2440的开发板。第一个项目的话是硬件软件的一个设计开发,没有涉及到底层的东西。 268 | 269 |   复盘:如何清晰的描述第一个项目。第一个项目主要做的就是硬件的设计,软件代码的移植,是偏上层的,没有和底层相关的技术。 270 | 271 | > 你自己考虑的话以后自己是偏向底层的开发对吧 272 | 273 |   对的 274 | 275 | > 是偏向系统呢,驱动呢,内核呢? 276 | 277 |   我目前考虑的是做驱动开发 278 | 279 | > 为什么是驱动开发呢 280 | 281 |   我觉得做底层这一块比较有意思吧,像做驱动开发的话,我们知道像安卓的camera驱动,音视频驱动这些,都是独立的一块,每一块拿出来都值得研究,我个人也比较倾向于从事有挑战性的工作。目前考虑的是先做Linux驱动,以后如果有可能的话会去做安卓的驱动,再慢慢的到camera驱动,音视频驱动这些。这也算是我的一个职业规划吧 282 | 283 |   复盘:回答的有点跑偏了,不过不要紧,还是向面试官表达出了自己做这个行业的一个规划。 284 | 285 |   下次这样回答:因为我觉得做底层的话,可以更清楚的知道我们的程序是如何运行的,程序编译完成后是如何在内存里面排布的,我个人对于技术好奇心很重,经常会想一些问题,比如在uboot启动过程中可以把dcache,icache都关掉吗,Linux内核是如何知道我现在所处的环境(运行于那个cpu上,其实就是uboot和内核参数传递方式,故意说的不清楚,让面试官问你)等等。对于这些问题,我喜欢刨根问底都搞明白。因此我喜欢做驱动开发。 286 | 287 | > 除了上课外,你会看一些什么样的内容呢? 288 | 289 |   我最近在看的两本书是Linux内核源代码情景分析,赵炯老师的Linux0.12内核完全注释。昨晚我在看的是Linux内核的源代码情景分析中的数据结构部分,包括链表,队列,二叉树等是如何实现的。(很巧了,正好昨晚看了这部分)。此外,每周的话,我都会去学习一些新的知识,把自己的感悟和其他人对于这个问题的看法记录在博客里面。大概就在些把,做的最多的就是写博客,从输入到输出的一个反馈把。 290 | 291 |   复盘:先抛出结论。先说,做的最多的就是写博客了,从输入到输出的反馈,巴拉巴拉。 292 | 293 |   我每周做的最多的事情主要有两个。第一个是学习新的知识,学习一些自己感兴趣的内容,比如我最近在看的书。第二就是写博客,每周我都会写一篇博客,这篇博客的内容主要就是本周学习的知识的总结,或者是之前遗留的疑问的解决。 294 | 295 | > 除了知识学习外,平常还有什么爱好 296 | 297 |   每周都会跑步3次左右,每周最少打一次篮球。 298 | 299 | > 看你写的博客,11个月,104篇,相当于每个月差不多10篇左右吧。 300 | 301 |   这104篇中有好多是我在自学Linux驱动开发过程中的一些笔记,随笔。在学习的过程中就顺手记录下来了。其实到后面慢慢发现,一个月内想要产出一篇不错的文章的话,还是要花一点时间的。所以说,我现在对于我自己的一个要求就是每周一篇,保证质量。不像之前那样,以一种记笔记的形式。 302 | 303 | > 这些文章中那些是访问量比较高的 304 | 305 |   单链表的增删改查反转等操作,单链表的冒泡,快排,归并等排序,线索二叉树等。 306 | 307 | > 数据结构也是自学的吗?对树熟悉吗?说下那些树,有什么特点 308 | 309 |   满二叉树,所有根节点都会有两个子节点。平衡二叉树,根节点的左孩子比根节点的值要小,右孩子比根节点的值要大 310 | 311 |   复盘:平衡二叉树都回答错了。 312 | 313 | > 做驱动过程中,有没有针对某一个点的优化和改善? 314 | 315 |   犹豫了半天,没有想起来。尴尬! 316 | 317 |   复盘:最基本的按键驱动啊,由查询方式改为中断方式。Uboot的启动过程中,将重定位的程序靠前存放(链接脚本),保证在4K以内的代码能完成后面程序的复制。 318 | 319 | > 反问 320 | 321 |   我什么时候能得到二面的结果呢? 322 | 323 | > 一周之内。后面会有HR联系你的。 324 | 325 |   接下来还有几轮面试 326 | 327 | > 应该还有一轮面试。HR面完了之后会综合评估,给出offer。 328 | 329 | ##### 总结 330 | 331 |   总体还行吧。70分。面试问的技术问题都是自己在资料中总结到的,二叉树的说错了,不知道面试官发觉没有。面试中很大一部分时间都在聊博客的事情,也算自己擅长的方向。 332 | 333 | 334 | 335 |   最后一个问题 回答的不好,实在没想起来,现在想想,举一个差不多的例子就可以了。直接回答不会有点不好。 336 | 337 | #### 三面(15min,9.14) 338 | 339 | > 面试完了有什么收获 340 | 341 |   有些问题本可以回答的很好,但是由于没什么经验,答得不太好。 342 | 343 | > 目前投了那些公司 344 | 345 |   就投了两家,一家是XX,另一家就是大华,大华是面试进度最快的。(其实已经投了几家了) 346 | 347 | > 家庭成员的情况。对工作地点有没有要求? 348 | 349 |   如实回答就可以。 350 | 351 | > 期望的工资 352 | 353 |   我说,公司应该都有个统一的标准,按照标准来就好了。HR说你最好还是说一个吧,我说了XXX。 354 | 355 | > 目前有那些OFFER 356 | 357 |   当时怕压价,就说了有了XX和XXX的offer(实际上都没有啊)。其实这里说漏嘴了,之前说只投递了两家,哪里来的offer?不知道HR有没有意识到。(如果大华的同事看到了,不要打我啊,哈哈。) 358 | 359 | > 反问 360 | 361 |   什么时候有结果? 362 | 363 | > 一周之内。 364 | 365 | ##### 总结 366 | 367 |   今天已经是9.21了。仍然没有结果。明天问下吧。 368 | 369 |   最终的offer发出是在9.30号,看了下也比较满意! 370 | 371 | ### 兆易创新(9.3) 372 | 373 | #### 一面(50min,9.21) 374 | 375 | > 项目问了很久 376 | 377 |   30min 378 | 379 | > 字符设备如何写,框架 380 | 381 |   资料总结的驱动框架里面有。很容易答了上来。 382 | 383 | > LCD驱动框架 384 | 385 |   资料总结的驱动框架里面有。很容易答了上来。 386 | 387 | > uboot启动流程 388 | 389 |   资料总结的驱动框架里面有。很容易答了上来。 390 | 391 | > SDRAM接口地址 392 | 393 |   具体地址忘了,但是我知道他是接在bank6的 394 | 395 | > 你是北方人,对工作地点有要求吗。 396 | 397 |   我:没有。我主要看重我在公司做什么。 398 | 399 | > 向你介绍下我们部门吧。巴拉巴拉说了很多工作内容后(当面试官说这个的时候,我觉得就有戏了),主要是做指纹芯片的,工作内容大多集中在在Android底层和hal层,给客户解决问题要占50%的时间。 400 | 401 |   其实个人不太喜欢这个工作,主要是有点FAE的感觉。但是当时没说出来。 402 | 403 | #### 二面(15min,9.25) 404 | 405 | > 如何了解到兆易创新的 406 | 407 |   很多比赛都是兆易创新赞助或者以兆易创新的名字命名的,我也参加了兆易创新今年举办的研电赛,我们在研电赛中获得了全国三等奖。 408 | 409 | > 目前手上的offer?给你开了多少? 410 | 411 |   大华,全志。还没谈。(当时也是为了怕压价,说了手上有两个offer) 412 | 413 | > 何时发三方?先拉进群 414 | 415 |   10月底,11月初。 416 | 417 | > 工作地点去深圳还是上海? 418 | 419 |   再考虑下。 420 | 421 | > 父母对于工作地点的要求 422 | 423 |   没有。 424 | 425 | > 打算在上海,深圳落户吗 426 | 427 |   没有。 428 | 429 |   直接拉进offer群里了,200+人,群里好多电科大,西电的,西交,西工大的,我在群里都不敢发言。 430 | 431 | #### 总结 432 | 433 |   个人还是不太喜欢这个工作,主要是做Android底层和Hal层,还给客户解决问题,占用了50%的时间。其实30%的时间是可以接受的,50%有点多了。感谢兆易创新对我的认可,不好意思! 434 | 435 | ### 景嘉微(9.13) 436 | 437 |   景嘉微的面试还是专业的。一天之内三面。每次面试都是两个面试官,二面还是一轮压力面。 438 | 439 | #### 一面(35min,9.23) 440 | 441 | > 项目 442 | 443 |   问的不详细,基本都是原理之类的,解释清楚就好。 444 | 445 | > 看你学过数据结构,自学的吗?刷了多少题?问个简单的吧 446 | 447 |   自己学的。具体多少没算过吗,大概有200道左右吧。 448 | 449 |   如何判断一个数是不是质数??真不会,忘了质数的概念,想了半天,面试官说,估计你对质数概念不了解,算了。 450 | 451 | > 自旋锁和信号量说下 452 | 453 |   答对了。 454 | 455 | > 二叉树什么时候会退化?什么是平衡二叉树? 456 | 457 |   不知道什么时候会退化。平衡二叉树就是左右子树度的差值小于1. 458 | 459 | > uboot启动流程 460 | 461 |   说了很多遍了。 462 | 463 | > Cache一致性 464 | 465 |   不知道这个概念。但是我具体说了下读写Cache的一些注意问题,比如初始化的时候一定要清空Cache之类的。 466 | 467 | > 如何写一个字符设备驱动 468 | 469 |   init函数,exit函数,file_operation结构体之类的东西 470 | 471 | > uboot启动为什么要关闭中断,MMU,DCACHE之类的 472 | 473 |   非必须关闭吧。uboot的目的就是引导内核启动,而且uboot启动的话只是把需要的打开了,其他非必须的都可以关闭。当然也可以打开。DCACHE之类的必须要关闭,因为SDRAM没有初始化,可能会取到错误的数据。 474 | 475 | > bin文件和elf文件区别 476 | 477 |   不清楚。后来在自己总结的面试知识点中增加了这个内容。 478 | 479 | > 什么时候用哈希?哈希冲突如何解决? 480 | 481 |   对时间要求比较高,对占用内存空间大小要求不高。开放地址法,再哈希法。 482 | 483 | #### 二面(45min,9.23) 484 | 485 | > 项目原理的介绍 486 | 487 | > 写博客的目的 488 | 489 |   之前也考虑过这个问题,当时说了4点。1.随笔的形式,方便自己回顾。2.好的学习习惯 3.认识了很多业内前辈。4.习惯之后,坚持每周输出。 490 | 491 | > 看你写了很多奖项,好多是校级的,有其他的吗? 492 | 493 |   有一个国家级的,研电赛全国三等奖。 494 | 495 | > 项目难点 496 | 497 |   巴拉巴拉。 498 | 499 | > 还有各种针对本人的问题,总之就是压力面,一直否定你这个人 500 | 501 |   你简历上写了这么多奖学金,你觉得你是你们周围最优秀的吗?为什么?你和别人差在哪?为什么本科毕业不直接参加工作?为什么考研?本科期间都做了哪些事情了?有什么收获?你觉得你是最努力的吗?以前是不是没有努力?为什么在看C primer plus?是基础不好吗?等等这类的问题。(这种问题沉着冷静的如实回答就可以。不要让面试官觉得你人有问题) 502 | 503 | #### 三面(30min,9.23) 504 | 505 | > 印象最深刻的人 506 | 507 | > 自我介绍 508 | 509 | > 介绍项目 510 | 511 | > 最成功的项目 512 | 513 | > 项目难点 514 | 515 | > 如何克服和学习项目的难点 516 | 517 | > 如果一笔订单需要你的上级审核,但是上级很忙,你会怎么办? 518 | 519 |   如果这个客户是和我们第一次交易并且时间又很紧急,那么可以考虑找上上一级领导。如果这个客户已经和我们有过多次交易并且上级领导实在没时间,那么我也可以审核。 520 | 521 |   复盘;反思了下,这里其实不该回答“自己也可以审核“这些话的。一般来讲,公司肯定有应对措施的。按照公司的流程走就好了。 522 | 523 | #### 总结 524 | 525 |   9.25发来Offer,国庆节后给答复。公司是在长沙,做显卡的,主要客户是部队。不是很想去,国庆节后上班第一天就给了景嘉微答复说不去。 526 | 527 | ### 全志科技(9.15) 528 | 529 | #### 一面(20min,9.23) 530 | 531 | > 项目简单介绍 532 | 533 | > 进程和线程区别 534 | 535 |   问了很多遍了。 536 | 537 | > 编程题:指针函数,函数的参数为int,返回值为字符指针 538 | 539 |   540 | 541 | ```c 542 | char *((*p)(int)) 543 | ``` 544 | 545 | > 宏定义求最大数 546 | 547 | ```c 548 | ​ #define MAX(a,b) (a)>(b)?a:b 549 | ``` 550 | 551 | > uboot启动流程 552 | 553 |   问了很多遍了。 554 | 555 | #### 二面(40min,9.26) 556 | 557 |   一个酒店,和研发部总经理聊了聊受益匪浅。 558 | 559 | > 为什么写博客? 560 | 561 |   之前也考虑过这个问题,当时说了4点。1.随笔的形式,方便自己回顾。2.好的学习习惯 。3.认识了很多业内前辈。4.习惯之后,坚持每周输出。 562 | 563 | > 项目原理,五分钟给我讲明白 564 | 565 | > 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 566 | 本文链接:https://blog.csdn.net/qq_16933601/article/details/111278570 567 | 568 |   边画图边讲。 569 | 570 | > 为什么学Linux?用的什么开发板?啥时候买的?多少钱买的?自学的吗?有人引导吗?学了多久? 571 | 572 | > 周围搞Linux的多不多? 573 | 574 | > 操作系统会吗?计算机组成原理了解多少? 575 | 576 |   了解一点,没有时间去完整的看。 577 | 578 | > 为什么没有时间完整的看? 579 | 580 |   白天忙导师安排的事情,还要写论文,改论文,写专利等等,晚上才有时间学习一些内容。当时紧接着又说虽然没时间完整的看,但是操作系统说基本的概念还是都理解的。 581 | 582 | > 说下MMU。什么是MMU?为什么需要MMU?来龙去脉讲清楚 583 | 584 |   大概讲的是这个里面的一些内容: 585 | 586 |   [S3C2410 MMU(存储器管理单元)详述](https://blog.csdn.net/qq_16933601/article/details/107217052) 587 |   物理地址到虚拟地址的映射,为了跑大型程序,操作更多的地址 588 | 589 | > 是虚拟地址到物理地址的映射,你搞反了。 590 | 591 | > 紧接着又说,我最看重的是操作系统和计算机组成原理的掌握程度,这些都是嵌入式的基础中的基础。 592 | 593 |   这些都是放在我计划之中,不过我目前在看源码的框架。 594 | 595 | > 先不要看源码,不懂操作系统和计算机组成原理,看源码会累死。我们之前一个项目要修改内核中的关于调度的程序,我研究进程调度这部分,研究了两周多才修改完。所以,有时间还是补下计算机基础。源码的内容别急着看。 596 | 597 |   面试官确实很厉害。也和自己说了很多。所以接下来调整下战略思路,**先看操作系统和计算机组成原理** 598 | 599 | > 在校期间,就要把基础打牢,好好看书。 600 | 601 |   之前面试其他公司,面试官问的关于操作系统的一些内容能答上来,这里我有点膨胀了,居然和面试官说操作系统的基本概念都理解。一下就被面试官问倒了。所以,如果不是特别熟悉,不要和面试官说我精通XXX之类的话,否则,肯定会被面试官问到不会为止。**吸取教训!** 602 | 603 | #### HR面(20min 9.26) 604 | 605 |   最后去另一个房间和HR聊了聊待遇和薪资,待遇一般,而且工资组成里面还有20%的绩效,上下浮动。不打算去。而且,因为之前全志也闹过裁员风波,所以试探性问了下HR试用期会裁多少人?HR回答的是我们并不规定具体的指标。我接着又补充说到,那么我是否可以理解为没有上限也没有下限呢?HR说是的。所以,直接拒了。 606 | 607 |   和HR聊完了,顺便问了下面试官的名字,HR说这是他们XX部门的研发总监。和这个面试官聊天,确实学到了很多,受益匪浅! 608 | 609 | 610 | 611 | ### 小米(9.15) 612 | 613 | #### 一面(40min,9.21) 614 | 615 | > 自我介绍 616 | 617 |   首先是自我介绍,本来准备的是三分钟的自我介绍,但是中途被面试官打断了,说面试时间有限,简短一点,要不后面没有时间写代码了。就介绍了下自己写博客的事情。接着面试官也很直接,上来就基础知识开始问。 618 | 619 | > 进程和线程的区别 620 | 621 |   答对了。  622 | 623 |   进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是**系统进行资源分配和调度的一个独立单位**。例如,用户运行自己的程序,系统就创建一个进程,并为它**分配资源**,包括各种表格、内存空间、磁盘空间、IO设备等,然后该进程被放入到进程的就绪队列,进程调度程序选中它,为它分配CPU及其他相关资源,该进程就被运行起来。 624 | 625 |   线程是进程的一个实体,是**CPU调度和分配的基本单位**,线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是,它可以与同属一个进程的其他的线程**共享进程所拥有的全部资源**。 626 | 627 |   在没有实现线程的操作系统中,进程既是资源分配的基本单位,又是调度的基本单位,它是系统中并发执行的单元。而在实现了线程的操作系统中,进程是资源分配的基本单位而线程是调度的基本单位,是系统中并发执行的单元。 628 | 629 |   不全。面试官又提醒了。进程间通信方式有那些,也回答上了。管道,FIFO,信号,信号量,消息队列,共享内存(最快),套接字。 630 | 631 | > 僵尸进程听过吗 632 | 633 |   没有。 634 | 635 | > static 和 volatile 636 | 637 |   答对了。 638 | 639 |   static主要是改变函数和变量的作用域。volatile防止对寄存器进行优化,使得每条指令都要按照我们写的进行运行 640 | 641 | > 两个Linux操作系统之间使用什么命令进行文件的传递? 642 | 643 |   我不知道是什么命令,但是我可以说下我的想法,我觉得利用HTTPS协议可以进行传输。 644 | 645 | > 不是命令,这是协议。 646 | 647 | > 数据结构学过吗?说下你知道的排序算法? 648 | 649 |   在校没有学过,但是我自己私下学过。排序算法:快排,选择排序,冒泡排序,插入排序,堆排序。 650 | 651 | > 说下快排的过程,快排的时间复杂度 652 | 653 |   巴拉巴拉,也答对了。 654 | 655 | > 手撕代码 656 | 657 |   反转字符串中的单词 I am a teacher -> rehcaet a ma I 658 | 659 |   很基础的问题,A了出来。 660 | 661 | > 最后反问 662 | 663 |   什么时候有结果? 664 | 665 | > 不确定,一周以后吧。 666 | 667 | ##### 总结 668 | 669 |   有好多基础知识没打上来。主要集中在操作系统相关的概念上。确实不知道,接下来要好好补充了! 670 | 671 | #### 二面 (50min,9.25) 672 | 673 | > 项目问的很细 674 | 675 |   20min,原理和流程图 676 | 677 | > typedef和 define有什么区别 678 | 679 |   1.typedef在编译时处理,具有类型检查的功能;define在预编译时展开,不会进行错误的检查,只是字符的替换。2.define没有作用域的限制,typedef有自己的作用域。3.typedef定义指针的别名时,别名可以连续定义两个指针变量。define定义指针的别名时,使用这个别名连续定义两个指针变量会报错。 680 | 681 | > 数组下标可以为负数吗 682 | 683 |   没见过,应该可以吧。 684 | 685 | > 不能用 sizeof()函数,如何判断操作系统是16位,还是32位 686 | 687 |   16位系统中,int变量的范围-32768到+32767,32767+1变为-32768。可以利用这个特性来判断。 688 | 689 | > IIC如何发送一个数据?IIC时序图画下。IIC芯片有哪些? 690 | 691 |   回答的还可以。 692 | 693 | > 用户栈和内核栈是同一个区域吗?有什么区别? 694 | 695 |   不是。用户栈和内核栈是两个独立的区域。内核栈保存的是内核态程序运行的时候相关寄存器信息,用户栈保存的是用户态的内容。 696 | 697 | > 用户空间和内核空间的通信方式? 698 | 699 |   1.API函数,Copy_from_user,get_user等。2.proc文件系统 3.mmap系统调用 4.使用文件 700 | 701 | > 中断的响应执行流程?听过顶半部和底半部吗?讲讲 702 | 703 |   cpu接受中断->保存中断上下文跳转到中断处理历程->执行中断上半部->执行中断下半部->恢复中断上下文。 704 | 705 |   顶半部执行一般都是比较紧急的任务,比如清中断。下半部执行的是一些不太紧急的任务,可以节省中断处理的时间。 706 | 707 | > 写过那些驱动?讲下LCD驱动如何编写? 708 | 709 |   巴拉巴拉,问了很多遍了。 710 | 711 | > 手撕代码 712 | 713 |   给定一个数组,找出和为s的数字。二分查找,A了。 714 | 715 | > 反问 716 | 717 |   如果有幸进公司,主要负责那些方面? 718 | 719 | > IO驱动,音视频驱动,内核的优化移植都有。看个人兴趣和过往经历的匹配程度。 720 | 721 |   多久出结果呢? 722 | 723 | > 月底前应该会给 724 | 725 | #### 三面(10min,10.15) 726 | 727 | > 家庭情况 728 | 729 | > 期望薪资 730 | 731 | > 有没有女朋友?工作地点是北京还是深圳? 732 | 733 |   北京。 734 | 735 | 736 | 737 | #### 总结 738 | 739 |   发下offer已经是10.20号了,太晚了,三方早已经寄走了,综合考虑,感觉性价比不是很高。如果冲着小米的平台去,确实还不错。其实心里有点小后悔。不过也就这样了,注定与小米无缘。 740 | 741 | ### 中国长城科技集团(9.15) 742 | 743 | > 项目 744 | 745 |   15min。 746 | 747 | > 你知道的Linux指令有那些 748 | 749 |   ls,ps,rm,cat,mv。 750 | 751 | > busybox是什么? 752 | 753 |   缩小版的unix系统常用命令工具箱。主要包含了一些常用的Linux指令,环境等。 754 | 755 | > 什么是根文件系统 756 | 757 |   根文件系统上是内核启动时所挂载的第一个文件系统,内核代码映像文件保存在根文件系统中。 758 | 759 | > 为什么写博客? 760 | 761 |   之前回答过了,四点。 762 | 763 | > 反问 764 | 765 |   这个岗位主要负责什么? 766 | 767 | > 你的岗位是Linux系统工程师,主要是负责操作系统的优化和移植。 768 | 769 | #### 总结 770 | 771 |   9.25号微信告诉我面试通过了,问我是否签约,综合考虑了下,拒绝了,抱歉!公司其实还不错,在长沙,一年保底16薪,包食宿,长沙人去蛮适合的。 772 | 773 | ### CEC子公司-北京华大电子(9.15) 774 | 775 |   面试官是两个人,一个HR,一个40多岁的主管。没问很深的技术问题,主要问了项目和写博客的事情。他们主要做WIFI芯片和SOC的,更多的可能是应用层的开发任务。待遇给的还可以,但是觉得平台小了,拒了,抱歉! 776 | 777 | ### 京信通信(9.16) 778 | 779 | #### 一面(10min,9.21) 780 | 781 |   具体问了什么忘记了。但是都不难,很基础的。(有史以来最短面试,10分钟就完了) 782 | 783 | #### 二面(15min,10.19) 784 | 785 |   早上九点半进入腾讯会议,发现还不止一个人。几个面试者就随便聊了几句。大家都不知道接下来是技术面还是群面,还是HR面?提前也没有通知面试的内容。后来进来一个女的说,大家可以耐心等待,有兴趣可以一起听下,我们挨个面。每个人大概20min左右。 786 | 787 |   第一个人面试完,HR让第二个人来,我看大家都没反应,我就第二个了。 788 | 789 | > 自我介绍 790 | 791 | > 你做决定的过程是怎么样的? 792 | 793 | > offer情况?期望薪资?工作地点? 794 | 795 | > 反问 796 | 797 |   大概多久会发offer?多久之后会谈薪? 798 | 799 | > 一周之内 800 | 801 | #### 总结 802 | 803 |   感觉面试不是很正规,电话面面试官迟到20min,而且也没问几个技术问题,10min就完了;一面和二面战线拉的太长了,不知道其他人有没有,反正我是这样。也可能是太菜了,后面才被捞起来的。10.23HR打电话确认是否接受offer,拒绝了,抱歉! 804 | 805 | 806 | 807 | ### 海格通信(9.27) 808 | 809 | #### 一面(20min,9.27) 810 | 811 |   群面,五人一组围一圈,每个人做自我介绍,HR会单独提问,大概内容就是关于哪里人,家庭,父母工作,对海格了解有多少等等。 812 | 813 | #### 二面(25min,9.27) 814 | 815 | > 项目 816 | 817 | > 你知道的常用Linux命令 818 | 819 |   mv,ls,cat,ps,mkdir,touch,find。 820 | 821 | > IO多路复用 822 | 823 |   不知道,但是我知道IO管脚的复用,巴拉巴拉解释了下。 824 | 825 | > 在Linux上编写过那些程序 826 | 827 |   基本的外设驱动都写过,led,按键,lcd,Nand Flash等。 828 | 829 | > 程序的编译过程分为几部分 830 | 831 |   预处理,编译,汇编,链接 832 | 833 | > 什么是4字节对齐?为什么需要对齐? 834 | 835 |   资料总结的有。 836 | 837 | > 如何求一个结构体成员变量的地址 838 | 839 |   正好前几天写了一个博客。 840 | 841 |   [内核中container_of宏的详细解释](https://blog.csdn.net/qq_16933601/article/details/108576447) 842 | 843 | > 函数指针和指针函数 844 | 845 |   资料总结的有。 846 | 847 | > 什么是野指针?如何避免? 848 | 849 |   资料总结的有。 850 | 851 | > sizeof和strlen区别? 852 | 853 |   sizeof是运算符,在程序编译时就已经确定了;strlen是函数,程序运行时才能计算。 854 | 855 | > int a[5] = {1,2,3,4,5},sizeof(a) = ? 856 | 857 |   20。 858 | 859 | > 快速排序的思想?时间复杂度? 860 | 861 |   理解为打扑克整理牌,O(nlogn)。 862 | 863 | > 哈希表是什么?如何使用? 864 | 865 |   答对了。 866 | 867 | > 反问 868 | 869 |   如果有幸进入贵公司,主要负责哪方面? 870 | 871 | > 负责调试和维护基本的外设驱动,配合硬件工程师进行新平台的开发。 872 | 873 |   什么时候可以得到这轮面试的结果? 874 | 875 | > 明天。 876 | 877 | #### 三面(10min,9.28) 878 | 879 |   党委副书记面试,全程很放松,就是普通的聊天,自我介绍,哪里人?为什么选择来南方读书?对于海格了解多少?如何看待加班?能接受加班吗?职业规划等? 880 | 881 | #### 四面(15min,9.28) 882 | 883 |   大boss面试,好像是个总经理,自我介绍,介绍下项目,项目几个人?你负责那部分?除了这个项目研究生期间还有那些团队合作的项目?你是扮演什么角色?你导师研究那个方向的?为什么你和导师的研究方向不一样?你觉得研究生期间导师对你的帮助大不大?女朋友哪里的?做什么工作的?有考虑过在广州定居吗?为什么?等等吧,还有些想不起来了。 884 | 885 | #### 总结 886 | 887 |   整个面试感觉浓浓的国企风味,很看重人的综合素质,对技术要求感觉不是很高。9.29约去谈薪,与其说是谈薪,不如说是直接告诉你。没有argue的余地。统一打包价。拒绝了,抱歉!。 888 | 889 | 890 | 891 |
892 | 893 | ## 简历被刷 894 | 895 | ### oppo(8.23) 896 | 897 |   不得不说,oppo的简历卡的是真的严格。全是人工筛选。不止要看你的学校,还要看你的项目经历是否匹配。我这被刷了也很正常。 898 | 899 |
900 | 901 | ## 笔试/测评挂 902 | 903 | ### 海康威视(9.1) 904 | 905 |  测评居然挂了,很可惜。 906 | 907 | ### 乐鑫(8.18) 908 | 909 |   之前乐鑫的HR说,提前批投递不影响秋招。所以很早就投递了乐鑫科技。乐鑫是我第一家笔试的公司。当时笔试题目是三道编程题。巨难!比华为的笔试题难度都大。而且,第一次用牛客的笔试系统,最基本的如何读取输入输出都不会,于是笔试直接挂了。 910 | 911 |   9.8号找HR确认说,提前批挂掉的会自动推到正式批。但是我等到9.19号也没有收到笔试。后来HR让我去官网看自己的简历的状态,结果显示人才池!正式批都没有笔试就直接人才池了?什么操作啊。。说不影响有点假,其实还是有影响的。可能提前批笔试挂掉的是不会有机会参加正式批的。(自己猜测) 912 | 913 | ### CVTE(9.16) 914 | 915 |   C厂的笔试挂的就很玄学了。当时对C厂还是抱有很大期望的。笔试题目中规中矩,大题也都A了出来。选择填空做的正确率应该有80%。但是最后笔试莫名其妙挂了。我同学投研发岗的无一例外笔试也都挂了。难道100分的题目,90分及格线?以后做C厂笔试题,大家要格外小心,尽量还是要高正确率! 916 | 917 |   12.9号,接到CVTE HR打来的电话,说在补录,约个时间面试。手上没有三方了,拒绝了。 918 | 919 |
920 | 921 | ## 没消息 922 | 923 | ### 寒武纪(9.3) 924 | 925 |   9.16号笔试之后就没消息了。三个大题,A了1.5个。(其实这个公司也不太了解,看到了有岗位就投了,据说是AI四小龙的老大) 926 | 927 | ### 华为(9.10) 928 | 929 |   8月份华为在线上做专场宣讲,当时的宣讲会每个部门都做了介绍,给了微信群,我也加了几个群。加到群里后HR会主动加你好友,直接打语音电话解决你关于投递岗位的疑问,很是热情。每个部门的HR都会说我们这里有很多HC,建议投递我们部门。 930 | 931 |   在选择部门时,主要考虑以下几个方面。鉴于今年的情况,华为的消费BG是不考虑了,毕竟芯片断供,手机业务也大打折扣,很大可能是缩招的。无线部门,也不考虑了。神终端,圣无线的名号不是吹的。而且,华为的无线部门成绩要求也比较高,10%左右?(别的部门的HR说的)。最后考虑智能车BU是新成立的,而且智能车BU的HR也极力推荐我们投递。于是就投递了智能车BU。 932 | 933 |   投递之后,在网上搜索关于这个部门的情况,看到了一条消息,大概意思就是说,这个部门的**人数不会太多,要小而精**。瞬间感觉到有点被车BU的HR坑了。 934 | 935 |   9.14笔试,大题A了第一道。后面两个没做。9.16发的测评链接。9.19问所投递部门的负责人说,第一批面试暂时截止了,后面还可能会有HC,名额不会太多,但是到了十月以后了。十月份再给HR发消息,HR已经不回复消息了。相反,投递其他部门的同学,在9.19-9.24这周都安排了面试。 936 | 937 |   怎么说呢,怪自己投递晚了吧,而且加上华为今年形势紧张。当时主要考虑,还没有准备好,而且华为基本是一天结束三面。没有准备好过去当炮灰也不值。所以投递有点晚。现在准备好了,但是已经错过了时间节点,有点可惜。 938 | 939 | >   [华为技术面试的准备和经验分享【完全攻略,已签约】 精](https://www.nowcoder.com/discuss/384814?type=post&order=time&pos=&page=2&channel=1013&source_id=search_post) 940 | >   [各位大佬,求华为面试手撕代码](https://www.nowcoder.com/discuss/513026?type=post&order=time&pos=&page=1&channel=1009&source_id=search_post) 941 | >   [华为这波操作以后,中兴可能成了最大赢家](https://www.nowcoder.com/discuss/545891?type=all&order=time&pos=&page=2&channel=-1&source_id=search_all_nctrack) 942 | >   [大半夜的睡不着谈谈华为秋招的看法。。](https://www.nowcoder.com/discuss/540489?channel=1009&source_id=home_feed) 943 | > 944 | > 更多关于华为招聘的内容,可以去牛客网搜索下。 945 | 946 |   11.30号,12.3号下午,分别接到了华为Cloud&AI和消费者BG的HR打来的电话,问了下我的基本情况,让我继续投递简历,考虑到已经没有三方了,就拒绝了。而且华为的人才池海了去了,这个时间节点还在拉人面试,猜测可能是HR的KPI还没完成吧。 947 | 948 | ### BOE(8.25 & 9.12) 949 | 950 |   很奇怪,提前批投了没消息,正式批也不给笔试。太难了。 951 | 952 | 953 | 954 | ### 恩智浦(9.15) 955 | 956 |   听说只招211/985? 957 | 958 | ### 瑞芯微(9.17) 959 | 960 |   挺想去这个公司的,但是也没消息。 961 | 962 | ### 紫光展锐(9.18) 963 | 964 |   主要是投递晚了。而且,很搞笑,只发了笔试短信通知笔试,在笔试当天却没有收到笔试链接。后来问了HR说:不好意思,这是我们第一次全网招聘,系统BUG了,后面我们会统一处理的。后面又发邮件问了几次HR什么时候安排笔试,回复也是很官方。太难了,错过了九月的最后一批笔试。 965 | 966 |   11.1号晚上12点发短信让11.2号下午直接参加面试,考虑到已经没有三方协议了,拒绝了。 967 | 968 | ### 联发科成都(9.18) 969 | 970 |   投递晚了啊,联发科成都那边可能是不缺人了,一直没消息。 971 | 972 | ### 小马智行(9.18) 973 | 974 |   随便投的,后来才知道这个公司基本只招985。 975 | 976 | ## 总结 977 | 978 |   整个秋招还算是比较顺利的,虽然九月初的时候有段时间心态有点崩,但是及时调整过来了。感觉秋招也很戏剧性,六分运气,四分实力。运气好,和面试官聊的顺利,说不定还能拿到sp,ssp。但是,也不能一味的去靠运气。机会总是留给有准备的人,机会没有到来时,要认真准备。当机会来临,我们要好好把握。 979 | 980 |   最后祝所有看到这篇文章的小伙伴,在秋招中都可以拿到心仪的offer。 981 | 982 | 983 | 984 | **  养成习惯,先赞后看!如果觉得写的不错,欢迎关注,点赞,在看,转发,谢谢!** 985 | 986 | 987 | 988 | 989 | 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 990 | 本文链接:https://blog.csdn.net/qq_16933601/article/details/111296224 991 | -------------------------------------------------------------------------------- /笔试面试技巧/如何写一份合格的简历.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 程序员如何写一份合格的简历? 4 | 5 | 本文首发于[如何写一份合格的简历?](https://mp.weixin.qq.com/s?__biz=Mzg5ODUxNDMxMA==&mid=2247484678&idx=2&sn=4a5a93b89b856b331149daffd61e1a9e&chksm=c06029eff717a0f90ac315946369e92b1af8fdf179ded9b96bd0d8ca225af028796780a8e4fa&token=86324414&lang=zh_CN#rd) 6 | 7 | 8 | 9 | 10 | 11 | 12 | @[toc] 13 | > 今天不聊技术,来聊一聊如何写一份合格的简历。前两天,在交流群看到了一个同学问如何写简历。于是,我就让他把简历发给了我。简历的制作过程考验了一个人的两个能力,逻辑能力和细节能力。而不考验设计能力。下面就这份简历存在的问题,以及如何写简历做个简单总结。 14 | 15 | ## 1. 原始简历 16 | 17 | ![原始简历](https://img-blog.csdnimg.cn/img_convert/b6894b2293e4e02d0fc77eae248c6c61.png) 18 | 19 | ![原始简历](https://img-blog.csdnimg.cn/img_convert/fa77e7d38de6c173be3d44bf87a5d0d3.png) 20 | 21 | ![原始简历](https://img-blog.csdnimg.cn/img_convert/44d398a1be2ed685389f7e84589f243f.png) 22 | 23 | ### 1.1 存在问题及改进建议 24 | 25 | | 存在问题 | 修改意见 | 26 | | :--------------------------------------- | :----------------------------------------------------------- | 27 | | 发给我的时候,简历命名为“我的简历+王五” | 简历命名:岗位+学校+姓名+邮箱。
嵌入式软件工程师+清华大学+王五+XX@163.com | 28 | | 教育经历跨行书写 | 最好写成一行,包括起止时间,学校,专业,学历,GPA(选填)
2018.09 - 2021.06 清华大学 信息与通信工程 硕士 GPA:3.63/4.0 (20%)
2014.09 - 2018.06 清华大学 电子信息工程 本科 GPA:3.72/4.0 (5%) | 29 | | 应聘的是技术岗位,校内经历和岗位关系不大 | 校内经历可以不写。如果简历放得下,这段经历往后放 | 30 | | 求职意向在简历中放的位置不合适 | 求职意向和个人信息放在一起。不要穿插在校内经历和项目经历之间;非必要情况下,不要只写一个期望工作地点 | 31 | | 左侧个人信息中 “西安”表述不明确 | 工作地点:西安 | 32 | | 左侧个人信息中邮箱名字太长 | 建议换一个163邮箱,邮箱名字可以是自己英文名字,中文名字拼音,电话等。 | 33 | | 左侧个人信息中身份证号不需要写 | 身份证号就不需要写了 | 34 | | 左侧个人信息中自我评价太长,没有重点 | 有较强的学习能力:成绩排名前5%,获得三次一等奖学金
有较强动手能力和团队协调能力:作为负责人,多次组织参与互联网+、挑战杯等大型比赛,获国家级奖励2次,省部级奖励5次 | 35 | | 项目经历中,重点不突出 | 建议换一种格式书写。具体格式见下;项目经历主要写自己做了那些,而不是写项目介绍 | 36 | | 项目经历中,没有项目开发环境 | 可以补上项目开发环境,比如,Gcc3.4.2,Linux3.4.2内核,Ubuntu16.04,S3C2440开发板 | 37 | | 第二页简历中左侧空白太多 | 很多网站导出的简历格式都是有问题的,建议自己可以用Typora或Word做一份 | 38 | | 第二页简历中获奖情况写的太乱 | 建议相同类型的放在一起。优先级如下:竞赛类>奖学金>论文>专利>其他 | 39 | | 第二页简历中个人技能排放位置太靠后 | 个人技能可以放在第一个。建议按照以下顺序排列:个人技能,项目经验,获奖,论文,个人评价。
个人技能尽量写和岗位匹配度高的。不知道怎么写的,可以去智联招聘看下相关岗位要求。 | 40 | | 简历总共三页,太长了 | 简历最多两页。专利可以单独列一栏,也可以和获奖情况放一起。视个人情况而定。 | 41 | 42 | 43 | 44 | ## 2. 书写简历注意问题 45 | 46 | ### 2.1 个人信息 47 | 48 |   姓名,出生年月,联系方式,籍贯,电子邮件,政治面貌,毕业院校,专业,求职意向(选填),期望工作地点(选填)。 49 | 50 | > 在官网投递简历时,一般会选择一个确定的工作岗位。面试官面试的时候,拿到的简历都是一个岗位的。 51 | 52 | ### 2.2 邮箱 53 | 54 |   最好使用163邮箱。邮箱名字可以是姓名全称,姓名简写,电话号码等。千万不要用aaeeeeeeee@163.com。HR看了会骂人的! 55 | 56 | ### 2.3 教育经历 57 | 58 |   时间,学校,专业,学历,GPA。教育经历一般由高到低写,如果绩点比较高,可以写上。 59 | 60 | ### 2.4 专业技能 61 | 62 |   尽量写和岗位匹配度高的。如果你应聘的是Linux驱动工程师,可以按照以下方式写。 63 | 64 | - 具有一定硬件基础知识,能看懂原理图和Dataheet 65 | 66 | - -熟练掌握c语言,具有良好编程风格,掌握Gcc、Shell等开发工具 67 | 68 | 如果你应聘的是嵌入式应用工程师,可以按照以下方式写。 69 | 70 | - 熟练Qt与C++编程,熟悉QSS,能够使用样式对界面和控件进行美化处理,可以独立编制定制控件,有良好的产品交互意识 71 | 72 | - 熟悉TCP/UDP的Socket编程、Http协议、Xml解析,串口等相关知识 73 | 74 | 如果你不知道怎么描述这些技能,可以去智联招聘看看对应岗位的一些要求。 75 | 76 | > 防止恶意转载 77 | > 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 78 | 本文链接:https://blog.csdn.net/qq_16933601/article/details/112982065 79 | ### 2.5 实习经历 80 | 81 |   主要从以下几个方面来写。 82 | 83 |   **公司名称**:XXX 84 | 85 |   **部门/岗位职责**:你所在的部门,以及你的岗位,你担任该岗位具体的工作内容是什么。其中的工作内容可以往你将要面试岗位的要求上靠 86 | 87 |   **实习时间**:2020.03~2020.06 88 | 89 |   **参与项目简介**:主要介绍项目主要内容,4~6句话即可。 90 | 91 |   **负责事宜**:写自己做了哪些内容。**第一**,XXXX;**第二**,XXXX;**第三**,XXX。 92 | 93 |   **实习收获**:这段实习经历给你带来的最大收货。这一点里,你可以适当写一些你今后的职业规划以及打算。 94 | 95 | ### 2.6 项目经验 96 | 97 |   一定要清晰明了,重点突出!千万不要写一大段话,面试官是没有耐心看这么多的。如果自己做过一些项目的话,建议写两到三个自己做过的项目,主要从以下几个方面介绍: 98 | 99 |   **项目名称**:基于XXX的XXX 100 | 101 |   **个人角色**:项目负责人/模块负责人 102 | 103 |   **起止时间**:2020.03~2020.06 104 | 105 |   **项目描述**:主要介绍项目主要内容,4句话即可。 106 | 107 |   **编程语言和环境**:Gcc3.4.2,Linux3.4.2内核,Ubuntu16.04,S3C2440开发板 108 | 109 |   **负责事宜**:写自己做了哪些内容。**第一**,XXXX;**第二**,XXXX;**第三**,XXX。 110 | 111 | ### 2.7 荣誉及奖项 112 | 113 |   相同类型的奖项最好放在一起。如果应聘的是开发岗,可以按照以下优先级来写:**竞赛>奖学金>论文>专利**。如果应聘的是算法岗,按照以下优先级来写:**顶刊/顶会>专利>竞赛>奖学金**。 114 | 115 | ### 2.8 个人博客 116 | 117 |   如果有博客且内容比较充实,可以放一个链接。博客不仅能看出水平,还可以看出态度。 118 | 119 |   面试的时间很短,面试官有时候一天面十几个人,对于应试者的能力考查未必很全面,有些优点在那么短的时间内展示不出来。如果有博客、 Github等,面试官可以提前用碎片时间了解,获得大致的印象。 120 | 121 | ### 2.9 自我评价 122 | 123 |   主要从以下几个方面写:**性格,学习能力,自我驱动能力**等。推荐采用三段式总分结构进行自我评价。下面给出一个模版。 124 | 125 | - 有较强的学习能力:成绩排名前5%,获得三次一等奖学金。 126 | 127 | - 有强烈的好奇心,对嵌入式底层比较感兴趣:自学了Linux驱动开发相关内容,移植了Linux3.4.2内核到S3C2440平台。 128 | 129 | - 拥有良好的沟通和协调能力,注重团队协作:在校期间,作为负责人,曾多次组织同学参与项目书的编写,并成功申请到国家级基金项目1项,省级重大专项2项。 130 | 131 | ### 2.10 其他注意事项 132 | 133 | - 英文请核对正确,注意大小写,比如GitHub,而非github,以官网为准 134 | - 时间建议统一格式为yyyy.mm - yyyy.mm,比如:2018.01 - 2018.12,而非 2018.1 - 2018.12 135 | - 简历颜色最多三种 136 | - 简历不要花哨,清除图标、进度条等附加元素 137 | - 了解、熟悉、精通等词汇谨慎使用,尤其是精通一词尽量不用 138 | - 应届生写清楚毕业时间 139 | - 如果有头像请放西服衬衫证件照 140 | 141 | ## 3. 简历模版推荐 142 | 143 | ### 3.1 [Markdown-Resume](https://resume.mdnice.com/) 144 | 145 |   一个非常简洁的在线制作简历网站。缺点是模版比较少。 146 | 147 | ### 3.2 [极简polebrief](https://www.polebrief.com/index) 148 | 149 |   免费且无需登录,制作方便,直接在模板上编辑,并且最后还可以导出Word、Pdf、Jpg等不同格式的简历。 150 | 151 | ### 3.3 [五百丁简历](https://www.500d.me/?f=2627476) 152 | 153 |   汇聚了各个行业的简历,涉及的职业类别也非常宽泛,简历非常有设计感。模板数量也很多,部分可能需要付费。 154 | 155 | ### 3.4 个人使用的简历模版 156 | 157 |   下面这个模版是我个人使用的一个,参照Markdown-Resume使用Word制作的。有需要的可以在公众号回复【**简历**】自取,**如果需要帮忙修改下简历,也可以加我微信,私发给我**。 158 | 159 | ![简历模版](https://img-blog.csdnimg.cn/img_convert/a509fb6d2e47f8b53a683398f4c9c153.png) 160 | 161 | ![动态引导三联_CSDN_](https://img-blog.csdnimg.cn/img_convert/764671b8ed9e737bd2b7d4d524f04053.gif) 162 | -------------------------------------------------------------------------------- /笔试面试技巧/如何在面试中介绍自己的项目经验.md: -------------------------------------------------------------------------------- 1 | 2 |   在面试时,经过寒暄后,一般面试官会让介绍项目经验 。常见的问法是,说下你最近的(或最拿得出手的)一个项目。 3 | 4 |   根据我们的面试经验,发现有不少候选人对此没准备,说起来磕磕巴巴,甚至有人说出项目经验从时间段或技术等方面和简历上的不匹配,这样就会造成如下的后果。 5 | 6 |   1 第一印象就不好了,至少会感觉该候选人表述能力不强。 7 | 8 |   2 一般来说,面试官会根据候选人介绍的项目背景来提问题,假设面试时会问10个问题,那么至少有5个问题会根据候选人所介绍的项目背景来问,候选人如果没说好,那么就没法很好地引导后继问题了,就相当于把提问权完全交给面试官了。 9 |    面试时7份靠能力,3份靠技能,而刚开始时的介绍项目又是技能中的重中之重,所以本文将从“介绍”和“引导”两大层面告诉大家如何准备面试时的项目介绍。 10 |    好了,如下是正文内容。 11 | 12 | ## 1.在面试前准备项目描述,别害怕,因为面试官什么都不知道 13 | 14 |   面试官是人,不是神,拿到你的简历的时候,是没法核实你的项目细节的(一般公司会到录用后,用背景调查的方式来核实)。更何况,你做的项目是以月为单位算的,而面试官最多用30分钟来从你的简历上了解你的项目经验,所以你对项目的熟悉程度要远远超过面试官,所以你一点也不用紧张。如果你的工作经验比面试官还丰富的话,甚至还可以控制整个面试流程(笔者在面试方面成精后也经常干这种事情,大家一定也能行)。 15 | 16 | | | **你** | **面试官** | 17 | | :------------------: | :--------------------------------------------: | :------------------------------------: | 18 | | 对你以前的项目和技能 | 很了解 | 只能听你说,只能根据你说的内容做出判断 | 19 | | 在面试过程中的职责 | 在很短的时间内防守成功即可 | 如果找不出漏洞,就只能算你以前做过 | 20 | | 准备时间 | 面试前你有充足的时间准备 | 一般在面试前用30分钟阅读你的简历 | 21 | | 沟通过程 | 你可以出错,但别出关键性的错误 | 不会太为难你,除非你太差 | 22 | | 技巧 | 你有足够的技巧,也可以从网上找到足够多的面试题 | 其实就问些通用的有规律的问题 | 23 | 24 |    既然面试官无法了解你的底细,那么他们怎么来验证你的项目经验和技术?下面总结了一些常用的提问方式。 25 | 26 | | **提问方式** | **目的** | 27 | | :----------------------------------------------------------: | :----------------------------------------------------------: | 28 | | 让你描述工作经验和项目(极有可能是最近的),看看你说的是否和简历上一致 | 看你是否真的做过这些项目 | 29 | | 看你简历上项目里用到的技术,比如框架、数据库,然后针对这些技术提些基本问题 | 还是验证你是否做过项目,同时看你是否了解这些技术,为进一步提问做准备 | 30 | | 针对某个项目,不断深入地问一些技术上的问题,或者从不同侧面问一些技术实现,看你前后回答里面是否有矛盾 | 深入核实你的项目细节 | 31 | | 针对某技术,问些项目里一定会遇到的问题,比如候选人说做过数据库,那么就会问索引方面的问题 | 通过这类问题,核实候选人是否真的有过项目经验(或者还仅仅是学习经验) | 32 | 33 | ## 2. 准备项目的各种细节,一旦被问倒了,就说明你没做过 34 | 35 |   一般来说,在面试前,大家应当准备项目描述的说辞,自信些,因为这部分你说了算,流利些,因为你经过充分准备后,可以知道你要说些什么。而且这些是你实际的项目经验(不是学习经验,也不是培训经验),那么一旦让面试官感觉你都说不上来,那么可信度就很低了。 36 | 37 |   不少人是拘泥于“项目里做了什么业务,以及代码实现的细节”,这就相当于把后继提问权直接交给面试官。下表列出了一些不好的回答方式。 38 | 39 | | **回答方式** | **后果** | 40 | | :----------------------------------------------------------: | :----------------------------------------------------------: | 41 | | 我在XX软件公司做了XX门户网站项目,这个项目做到了XX功能,具体是XX和XX模块,各模块做了XX功能,客户是XX,最后这个项目挣了XX钱 | 直接打断,因为业务需求我不需要了解,我会直接问他项目里的技术 | 42 | | (需要招聘一个Java后端开发,会Spring MVC)最近一个项目我是用C#(或其他非Java技术)实现的,实现了……或者我最近做的不是开发,而是测试……或者我最近的项目没有用到Spring MVC | 提问,你最近用到SSH技术的项目是什么时候,然后在评语上写:最近XX时间没接触过SSH | 43 | | 在毕业设计的时候(或者在读书的时候,在学习的时候,在XX培训学校,在XX实训课程中),…… | 直接打断,提问你这个是否是商业项目,如果不是,你有没有其他的商业经验。如果没商业项目经验,除非是校招,否则就直接结束面试 | 44 | | 描述项目时,一些关键要素(比如公司、时间、所用技术等)和简历上的不匹配 | 我们会深究这个不一致的情况,如果是简历造假,那么可能直接中断面试,如果真的是笔误,那么就需要提供合理的解释 | 45 | 46 |   在避免上述不好的回答的同时,大家可以按下表所给出的要素准备项目介绍。如果可以,也请大家准备一下用英语描述。其实刚毕业的学生,或者工作经验较少的人,英语能力都差不多,但你说了,这就是质的进步。 47 | 48 | | 要素 | 样式 | 49 | | :----------------------------------------------------------: | :----------------------------------------------------------: | 50 | | 控制在1分钟里面,讲出项目基本情况,比如项目名称,背景,给哪个客户做,完成了基本的事情,做了多久,项目规模多大,用到哪些技术,数据库用什么,然后酌情简单说一下模块。重点突出背景,技术,数据库和其他和技术有关的信息。 | 我在XX公司做了XX外汇保证金交易平台,客户是XX银行,主要完成了挂盘,实盘成交,保证金杠杆成交等功能,数据库是Oracle,前台用到JS等技术,后台用到Java的SSH,几个人做了X个月。不需要详细描述各功能模块,不需要说太多和业务有关但和技术无关的。如果面试官感兴趣,等他问。 | 51 | | 要主动说出你做了哪些事情,这部分的描述一定需要和你的技术背景一致。 | 我做了外汇实盘交易系统,挂单成交系统,XXX模块,做了X个月 | 52 | | 描述你在项目里的角色 | 我主要是做了开发,但在开发前,我在项目经理的带领下参与了业务调研,数据库设计等工作,后期我参与了测试和部署工作。 | 53 | | 可以描述用到的技术细节,特别是你用到的技术细节,这部分尤其要注意,你说出口的,一定要知道,因为面试官后面就根据这个问的。你如果做了5个模块,宁可只说你能熟练说上口的2个。 | 用到了Java里面的集合,JDBC,…等技术,用到了Spring MVC等框架,用技术连接数据库。 | 54 | | 这部分你风险自己承担,如果可以,不露声色说出一些热门的要素,比如Linux,大数据,大访问压力等。但一旦你说了,面试官就会直接问细节。 | 这个系统里,部署在Linux上,每天要处理的数据量是XX,要求是在4小时,1G内存是的情况下处理完5千万条数据。平均访客是每分钟XXX。 | 55 | 56 |   面试前,你一定要准备,一定要有自信,但也要避免如下的一些情况。 57 | 58 | | 要避免的情况 | 正确的做法 | 原因 | 59 | | :------------------------------------------: | :--------------------------------------------: | :----------------------------------------------------------: | 60 | | 回答很简单。问什么答什么,往往就用一句话回答 | 把你知道的都说出来,重点突出你知道的思想,框架 | 问:你SSH用过吗?答:用过。问:在什么项目里用到?答:一个保险项目 | 61 | | 说得太流利 | 适当停顿,边思考边说 | 让面试官感觉你在背准备的东西,这样后面问题就很难 | 62 | | 项目介绍时什么都说, | 就说些刚才让准备的一些,而且要有逻辑地说 | 会让面试官感觉你思路太乱 | 63 | | 别太多介绍技术细节,就说你熟悉的技术 | 技术面点到为止,等面试官来问 | 你说到的所有技术要点,都可能会被深问。面试官一般会有自己的面试节奏,如果你在介绍时就太多说技术细节,很有可能被打断,从而没法说出你准备好的亮点。 | 64 | 65 | ## 3.不露痕迹地说出面试官爱听的话 66 | 67 |   在项目介绍的时候(当然包括后继的面试),面试官其实很想要听一些关键点,只要你说出来,而且回答相关问题比较好,这绝对是加分项。我在面试别人的时候,一旦这些关键点得到确认,我是绝对会在评语上加上一笔的。 68 | 69 |   下面列些面试官爱听的关键点和对应的说辞。 70 | 71 | | 关键点 | 说辞 | 72 | | :------------------------------------------------------: | :----------------------------------------------------------: | 73 | | 能考虑到代码的扩展性,有参与框架设计的意识 | 我的项目XX保险项目,用到SSH技术,数据库是Oracle,(这个是铺垫),开发的时候,我会先和项目经理一起设计框架,并参与了框架的构建,连接数据库的时候,我们用到了DAO,这样做的理由是,把SQL语句封装到DAO层,一旦要扩展功能模块,就可以不用做太多的改动。 | 74 | | 有调优意识,能通过监控发现问题点,然后解决 | 在开发阶段,我就注意到内存的性能问题和SQL运行的时间问题,在压力测试阶段,我会通过xx工具来监控内存和数据库,发现待提升的代码点,然后通过查资料来优化。最后等项目上线后,我们会部署监控系统,一旦发现内存和数据库问题,我们会第一时间解决。 | 75 | | 动手能力很强,肯干活,会的东西比较多,团队合作精神比较好 | 在项目里,我不仅要做开发的工作,而且需要自己测试,需要自己根据一些日志的输出到数据库或Java端去debug,当我开好一个模块时,需要自己部署到Linux上测试。或者,一旦遇到问题,如果是业务方面的,我会及时和项目经理沟通,如果是技术方面的,我会自己查资料,如果是测试方面的,我会及时和测试的人沟通。 | 76 | | 责任心比较强,能适应大压力的环境 | 被问“你如果在项目里遇到问题怎么办?”回答:遇到问题我先查资料,如果实在没法解决,不会拖,会及时问相关的人,即使加班,也会在规定的时间内解决。 | 77 | | 有主见,能不断探索新的知识 | 在项目里,我会在保证进度的前提下和项目经理说我的想法,提出我的解决方案。在开发过程中,我会先思考一下,用一种比较好的方式,比如效率最高的方法实现。 | 78 | 79 | ## 4.一定要主动,面试官没有义务挖掘你的亮点 80 | 81 |   我去面试人家的时候,往往会特别提问:你项目里有什么亮点?或者你作为应聘者,有什么其他加分项能帮你成功应聘到这个岗位。即使这样问,还有些人直接说没有。 82 | 83 |   我这样问已经是处于角色错位了,作为面试者,应当主动说出,而不是等着问,但请注意,说的时候要有技巧,找机会说,通常是找一些开放性的问题说。 84 | 85 |    比如:在这个项目里用到了什么技术?你除了说一些基本的技术,比如Spring MVC,Hibernate,还有数据库方面的常规技术时,还得说,用到了Java内存管理,这样能减少对虚拟机内存的压力,或者说用到了大数据处理技术等。也就是说,得找一切机会说出你拿得出手的而且当前也非常热门的技术。 86 | 87 |   或者找个相关的问题做扩展性说明,比如被问到:你有没有用到过一对多和多对多?你除了说基本知识点以外,还可以说,一般我还会根据需求适当地设置cascade和inverse关键字,随后通过一个实际的案例来说明合理设计对你项目的帮助,这样就能延伸性地说明你的技能了。相反如果你不说,面试话一定会认为你只会简单的一对一和一对多操作。 88 | 89 |   面试的时候,如果候选人回答问题很简单,有一说一,不会扩展,或者用非常吝啬的语句来回答我的问题,那么我一般会给机会让他们深入讲述(但我不敢保证不是每个面试官都会深入提问),如果回答再简洁,那么也会很吝啬地给出好的评语。 90 | 91 |   记住:面试官不是你的亲戚,面试官很忙,能挖掘出你的亮点的面试官很少,而说出你的亮点是你的义务。 92 | 93 |   我在面试别人过程中,根据不同的情况一般会给出如下的评语。 94 | 95 |   1 回答很简答,但回答里能证明出他对框架等技术确实是做过,我会在评语里些“对框架了解一般,不知道一些深层次的知识(我都问了多次了你都回答很简答,那么对不起了,我只能这么写,或许你确实技术很强,那也没办法,谁让你不肯说呢?)”,同时会加一句“表达能力很一般,沟通能力不强”,这样即使他通过技术面试,后面的面试他也会很吃力。 96 | 97 |    2 回答很简单,通过回答我没法验证他是在项目里做过这个技术,还是仅仅在平时学习中学过这个技术。我就会写“在简历中说用过XX技术,但对某些细节说不上来,没法看出在项目里用到这个技术”,如果这个技术是职务必需点,那么他通过面试的可能性就非常小。 98 | 99 |    3 回答很简单,而且只通过嗯啊之类的虚词回答,经过提醒还这样,我会敷衍几句结束面试,直接写“技术很薄弱,没法通过面试”。 100 | 101 |   经理斟酌”。这样通过后继综合面试的机会就一般了,毕竟综合面试会着重考察表达能力交往能力等非技术因素。 102 | 103 | **  不管怎样,一旦回答简单,不主动说出你的擅长点,或没有条理很清楚地说出你的亮点,就算我让你通过面试,也不会写上“框架细节了解比较深,数据库应用比较熟练”等之类的好评语,你即使通过技术和后面的综合面试,工资也是比较低的。** 104 | 105 | ## 5.一旦有低级错误,可能会直接出局 106 | 107 |   面试过程中有些方面你是绝对不能出错,所以你在准备过程中需要尤其注意如下的因素。下面列了些会导致你直接出局的错误回答。 108 | 109 | | 错误类型 | 导致的后果 | 110 | | :----------------------------------------------------------: | :----------------------------------------------------------: | 111 | | 前后矛盾,后面的回答无法证明你的项目描述,比如一开始说用到了Spring MVC,后面没法说出最基本的实现,比如不知道Spring有哪些类,或者没法说出项目的细节。 | 我会怀疑这个项目的真实性,我就会进一步问:数据库用什么,数据量多少?多少人做了多少时间,一旦再出现明显漏洞,比如一个小项目用到非常多的时间,那么就不仅仅是技术问题,而是在面试过程中企图“蒙混过关”的性质了。 | 112 | | 项目里一定会用到的基本概念性问题都回答不上,Spring的依赖注入概念是什么,怎么用的,或者Hibernate的一对多怎么实现 | 一旦被我发现概念不知道,我就会通过更多问题确认,如果被我确认很弱,这就相当严重,因为技术能力差和技术没用过是两个截然不同的状况,技术没用过会导致直接出局。 | 113 | | 面试时说出的工作经验和简历上的不一致 | 我会直接怀疑简历是编的,我会让候选人解释,即使是说简历写错了,我也会问比较深入的问题来核实他的技能和能力。 | 114 | | 简历上的技能描述和回答出来的明显不一致,比如明明是只会简单的Linux,但吹得天花乱坠 | 我会通过一些比较深的问题核实其他技能,找出其他方面吹嘘的水分。所以建议,你可以适当夸张,但别过分,比如你在项目里没搭建框架但平时学习时搭建过,你可以写“XX项目的框架是你搭建的”,但你不能说你是一个架构师,非常了解项目的底层。 | 115 | | 让面试官感觉你不稳定,很浮躁,比如说话不庄重,或者面试时打扮非常不正规,就穿背心来。 | 即使你技术再好,这个会可能导致你直接出局。我对油嘴滑舌的候选人一般会直接写上不好的评语,这样很难过后面项目经理的面试。我还遇到一个人,简历上工作是半年一换,我问他为什么经常换,他直接说是待遇问题,这个人我是直接Fail掉。 | 116 | | 明说不能加班,不能出差 | 其实虽然有这一问,但公司里未必真的会加班会出差。但听到这类回答,说明这个人不能承受大压力的工作,或者责任心不强,大多数公司是不会要这种人的。 | 117 | 118 | ## 6.引导篇:准备些加分点,在介绍时有意提到,但别说全 119 | 120 |   在做项目介绍的时候,你可以穿插说出一些你的亮点,但请记得,不论在介绍项目还是在回答问题,你当前的职责不是说明亮点而是介绍项目,一旦你详细说,可能会让面试官感觉你跑题了。 121 | 122 |   所以这时你可以一笔带过,比如你可以说,“我们的项目对数据要求比较大,忙的时候平均每小时要处理几十万条数据”,这样就可以把面试官引入“大数据”的方向。 123 | 124 |   你在面试前可以根据职位的需求,准备好这种“一笔带过”的话。比如这个职位的需求点是Spring MVC框架,大数据高并发,要有数据库调优经验,那么介绍以往项目时,你就最好突出这些方面你的实际技能。 125 | 126 |   再给大家举个例子,比如Java虚拟机内存管理和数据库优化是绝大多数项目都要遇到的两大问题,大家都可以在叙述项目经验时说,在这个项目里,我们需要考虑内存因素,因为我们的代码只允许在2G内存环境中运行,而且对数据库性能要求比较高,所以我们经常要监控优化内存和数据库里的SQL语句。这样当面试官深入提问时,就能抛出自己准备好的虚拟机内存优化和数据库优化方面的说辞。 127 | 128 |   实在不行,你也可以说“我除了做开发,也做了了解需求,测试和部署的工作,因为这个项目人手比较少,压力比较大”,这样你也能展示你有过独挡一面的经历。 129 | 130 |   我在面试过程中,一旦听到有亮点,就会等到他说好当前问题后,顺口去问,一般技术面试最多办半小时,你把时间用在回答准备好的问题点上的时候,被问其他问题的时间就会少了。 131 | 132 | ## 7.你可以引导,但不能自说自话 133 | 134 |   我面试的时候,也会遇到些有准备的人,其实如果你真的想应聘的话,一定要事先准备,这点我能理解,甚至赞同,你只要别露出太明显的痕迹,我不会写上“似乎有准备,没法考察真实技能”这种话,更何况未必每个面试官都能感觉出你准备过。 但你不能凭着有准备而太强势,毕竟面试是面试官主导的。 135 | 136 | ​   我遇到个别面试的人,他们说话太多,一般会主动扩展,比如我问他数据库用什么,他不仅回答数据库是什么,自己做了什么,甚至顺便会把大数据处理技术都说出来。 137 | 138 |   其实过犹不及,我就会重点考察你说的每个细节,因为我怀疑你说的都是你从网上看的,而不是你项目中用到的,我甚至会直接威胁:“你先和我说实话这个技术你真在项目里用到,我后面会重点考察,一旦被认为你项目里没做,这个性质就是蒙混过关了”,往往这些人会主动坦白。 139 | 140 |   不过话说回来,他如果仅仅说,数据量比较大,但点到为止,不继续说后面的话,我就会深入去问,他自然有机会表达。同时请注意,一般在面试过程中,一旦你亮出加分点,但面试官没接嘴,这个加分点可能就不是项目必备的,也不是他所关注的,当前你就可以别再说了,或者等到你提问题的时候再说。 141 | 142 | ## 8.不是结尾的总结 143 | 144 |   两句话,第一,面试前一定要准备,第二,本文给出是的方法,不是教条,大家可以按本文给出的方向结合自己的项目背景做准备,而不是死记硬背本文给出的一些说辞。 145 | 146 |   当大家介绍好项目背景后,面试才刚刚开始,哪怕你说得再好,哪怕你把问题引导到你准备的范围里,这也得应付Java Web(比如Spring MVC,ORM等)、Java Core(多线程、集合、JDBC等)和数据库等方面的问题。 147 | 148 |   那么本文的价值体现在哪呢?如果引导不好,你根本没机会展示自己的能力。这就是本文给出的方法价值所在。说句自夸的话,本文给出的一些方法和说辞不是拍脑袋想出来的,而是从面试上百个候选人的经历中抽取出来的,其中有不少血泪,也有不少人成功的途径,这篇文章多少对大家(尤其是经验不满3年的初级程序员)有帮助,这也是本文申请放入首页的理由。 149 | 150 |    这不是结尾,我们还将在合适的时候写一些关于“如何应对常见问题”或“如何快速提升自己能力”等方面的博文。 151 | 152 | 153 | -------------------------------------------------------------------------------- /笔试面试技巧/微信群聊干货分享.md: -------------------------------------------------------------------------------- 1 | - [20210430](#20210430) 2 | - [扫码加我微信](#扫码加我微信) 3 | 4 | ## 20210430 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210430213117.png) 17 | 18 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501164213.png) 19 | 20 | 21 | 22 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210430212931.png) 23 | 24 | 25 | 26 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501164239.png) 27 | 28 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501164832.png) 29 | 30 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501164613.png) 31 | 32 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501164906.png) 33 | 34 | 35 | 36 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501165032.png) 37 | 38 | 39 | 40 | 41 | 42 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210430214103.png) 43 | 44 | 45 | 46 | 47 | 48 | ## 扫码加我微信 49 | 50 | 备注【交流群】,拉你进群 51 | 52 | ![](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/%E4%B8%AA%E4%BA%BA%E4%BA%8C%E7%BB%B4%E7%A0%81-%E7%BE%8E%E5%8C%96.png) 53 | -------------------------------------------------------------------------------- /笔试面试技巧/恭喜那些取得offer的同学.md: -------------------------------------------------------------------------------- 1 | **希望有一天,你也能获得心仪的offer!** 2 | 3 | **真心为这些同学感到开心~** 4 | 5 | ## 20210430 6 | 7 | 8 | 9 | 10 | 11 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501163408.png) 12 | 13 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501163127.png) 14 | 15 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501163207.png) 16 | 17 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501163607.png) 18 | 19 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501162912.png) 20 | 21 | 22 | 23 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501162844.png) 24 | 25 | 26 | 27 | ![](https://gitee.com/dongxingbo/Picture/raw/master//Wechat/Article/2021/%E5%9B%9B%E6%9C%88//20210501163700.png) 28 | 29 | 30 | 31 | 32 | ## 扫码加我微信 33 | 34 | 加我微信【LinuxDriverDev】,进技术交流群。 35 | 36 | ![](https://github.com/ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview/blob/main/%E7%A7%8B%E6%8B%9B%E9%9D%A2%E7%BB%8F%E6%80%BB%E7%BB%93/%E4%B8%AA%E4%BA%BA%E4%BA%8C%E7%BB%B4%E7%A0%81-%E7%BE%8E%E5%8C%96.png) 37 | -------------------------------------------------------------------------------- /笔试面试技巧/校招信息获取渠道.md: -------------------------------------------------------------------------------- 1 | 2 | ## 就业网站 3 | 4 | 第一个渠道就是学校和学院的就业网站: 5 | 6 | 关注宣讲和招聘信息;另外就是秋招和春招的时候学校都会举行招聘会。不要忘记参加。 7 | ## 企业官网 8 | 9 | 第二个渠道就是企业的官方途径: 10 | 11 | 主要是指各大中型公司的招聘官网。还建议关注企业招聘公众号、微博号等,还可以直接跟公众号互动,留言,一些疑问有的时候可能会被解答。 12 | 13 | 这些地方的招聘信息通常最全,不仅包括招聘岗位、网申笔试面试的时间、还有招聘流程,校园宣讲会时间地点等。 14 | ## 招聘APP 15 | 16 | 第三个渠道就是招聘网站和APP,它们综合了大量企业的招聘信息,可以获得比较多的校招信息。下面是我整理的质量还不错的招聘网站,一般来说知名度高的网站肯定是信息量最大的地方: 17 | 18 | 1、**前程无忧(51job)**: 19 | 20 | 一个非常老牌招聘网站。 21 | 22 | 2、**智联招聘**: 23 | 24 | 老牌招聘网站,和51job差不多。 25 | 26 | 3、**拉勾校招**: 27 | 28 | 专注于互联网行业招聘,能够聊天。 29 | 30 | 4、**boss直聘网**: 31 | 32 | boss上互联网企业比较多,可以直接跟HR沟通,运气好的话,可能跟boss直接沟通了 33 | 34 | 5、**大街网**: 35 | 36 | 一个综合类招聘网站 37 | 38 | 6、**实习僧**: 39 | 40 | 校招和实习的好网站,雇主信息质量比较高 41 | 42 | 7、**牛客网**: 43 | 44 | 牛客网是不仅可以看到各企业的招聘信息,而且还有强大的面试经验分享,往年笔试真题分享等,一些互联网公司HR经常会直接在上面发帖,如果你在上面勾搭到已经入职的小哥哥小姐姐们,说不定还可以让帮忙内推到心仪企业。 45 | 46 | 8、**应届生求职网**: 47 | 48 | 这个网站校招信息全,也可以查询到各地各校的宣讲会,而且它的文库里面有求职大礼包,上面整理了一些企业的详细信息介绍,面试流程和经验等; 49 | 50 | 9、 **海投网**: 51 | 52 | 海投网宣讲会查询系统对应届生很实用,可以看到各城市各高校近期将举办的宣讲会,相当于资源整合,方便大家选择,也有笔面试经验和真题分享,还有简历在线制作,模板下载。 53 | 54 | 10、**刺猬实习**: 55 | 56 | 类似于实习僧,个人感觉信息和雇主信息比不上实习僧。 57 | --------------------------------------------------------------------------------