TP-LINK联洲提前批
TP-LINK联洲提前批
嵌入式软开岗位
一、笔试
在6-10下午宣讲会的时候投了简历,6-11 9:15收到笔试通知,拖到6-17上午才抽时间进行笔试,当日14:10收到一面通知
笔试分为四个部分,分别是专业知识、阅读理解、图表理解、找规律。
专业知识
时间:75分钟
内容:有选择题、简答题、编程题,可以来回翻阅检查。编程题调试的时候只会告诉你对不对,没法作为一个ide使用(可能是为了避免拿他跑选择和简答的答案吧)。基本都是比较简单的题,大多是一些语言特性,以至于做完都没什么印象……
-
选择题:看程序选结果、fork返回值、死锁的条件……
-
简答题:进程和线程的关系、看出代码错误,并改代码……
-
编程题:字符串压缩、多进程编程(编写一个多进程程序,要求父进程读取文件,子进程输出行号和每行字符数)。
阅读理解
时间:10分钟,每一题都有单独的时间(大概60-90s)
内容:都是选择题,给一些小的段落,让你选段落大意之类的,总体难度不高,就是有时候时间不够。
图表理解
时间:10分钟,每一题都有单独的时间(大概60-90s)
内容:都是选择题,给一些图表,让你估算算增速之类的,选择一个最相近的,需要快速找到对应数据进行估算,因为计算来不及。
图形推理
时间:10分钟,每一题都有单独的时间(大概60-90s)
内容:应该类似智商测试的题,给你一些图形,找出最符合规律的,题听难绷的,根本来不及……
二、一面
自我介绍、纯问项目,其他什么都没问,时间大概也就二十分钟的样子,非常愉快。
大概问了项目的实现、难点什么的。
三、二面
周五一面的,周一就约了周二的二面。
先进行自我介绍,然后问了下是考研还是保研的,看我有WiFi相关的经历,问我为什么选择嵌入式软件开发而不是无线。
项目拷打
- 介绍下项目背景
- 你在项目中做的是什么
- 做了哪些改进
- 是否有专利
手撕代码
题目是打印第三大数。
博主在大三ACM退役后到现在基本没写过算法题了,这几个月一直在做硬件/射频相关的项目,也没怎么写代码,翻车现场了属于是。
首先是前几天重装电脑,环境没配好,一直跑不起来,最后用命令行编译运行的;
然后是初始化的时候用了第一个数初始化,面试官问的时候我还信誓旦旦,结果被面试官hack了;
最后紧张的不行,把三个数排序也搞半天,感觉面完心凉了一截,我都不好意思说我有acm经历了……
八股
- 输入www.tpliink.com会经历哪些层,使用哪些协议
- 应用层(dns,http)、传输层(tcp)、网络层(arp)、物理层
- 说是应用层外除了dns和http还用了什么,我不知道啊,提示说是在最内层报文的头部,面试官一脸失望
- 我现在还是不知道少了什么
- 三线程循环打印abc
- 直说不会多线程编程
- sizeof和strlen的区别,他们分别在哪一步生效
- sizeof是计算占用空间,strlen计算字符串长度
- sizeof在编译生效,strlen在运行时生效
- 进程地址空间分为哪些部分
- 内核
- 栈:存放一些临时变量和函数之类的
- 堆:malloc
- bss:未初始化的静态变量和全局变量
- data:初始化的静态变量和全局变量
- test:代码段
- static关键字
- 修饰变量和函数,文件外不可通过extern使用
- 函数内static,函数共用
- c++ 静态成员,类共用
- C++ 静态成员函数,可访问静态成员数据
四、三面
今天周四了,依然没收到面试通知,怕是凉了。
五、面试内容复盘
进程和线程的区别
多进程编程
编写一个多进程程序,要求父进程读取文件,子进程输出行号和每行字符数
考查进程创建和管理、进程间通信(例如pipe)、文件读写等内容
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <unistd.h>
#define MAX_LINE_LENGTH 1024
int main() {
int pipe_fd[2];
pid_t pid;
if (pipe(pipe_fd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid != 0) {
close(pipe_fd[0]);
FILE *fd = fopen("data.txt", "r");
if (!fd) {
perror("fopen");
exit(EXIT_FAILURE);
}
char buf[MAX_LINE_LENGTH];
ssize_t bytes_read;
while ((bytes_read = fread(buf, 1, MAX_LINE_LENGTH, fd)) > 0) {
write(pipe_fd[1], buf, bytes_read);
}
fclose(fd);
close(pipe_fd[1]);
wait(NULL);
return EXIT_SUCCESS;
} else {
close(pipe_fd[1]);
char line[MAX_LINE_LENGTH];
int line_number = 1;
ssize_t bytes_read;
int char_cnt = 0;
while ((bytes_read = read(pipe_fd[0], line, MAX_LINE_LENGTH)) > 0) {
for (int i = 0; i < bytes_read; ++i) {
if (line[i] == '\n') {
printf("Line %d: %d characters\n", line_number, char_cnt);
line_number++;
char_cnt = 0;
} else {
++char_cnt;
}
}
}
if (char_cnt) {
printf("Line %d: %d characters\n", line_number, char_cnt);
char_cnt = 0;
}
}
return 0;
}