
大家好,我是阿秀。
如果评选近几年的网络十大热词,那遥遥领先大概率要入选,这几年华为背靠手机、通讯、新能源、芯片等行业发展迅速,确实可以称得上某种意义上的遥遥领先。
如果你的专业是通信、电信、计算机等传统工科专业,那华为绝对是你求职路上绕不过去的一家公司,事实上华为近几年招的应届生数量堪称恐怖,每年九十月份网上都会出现大量的"华孝子",这也造成了很多人都选择 all in 华为这家公司。
前段时间写过一篇文章:关于所谓的"华为最新招聘目标院校表",简单辟个谣,辟谣了下很火的"华为最新招聘目标院校表"是虚假信息。其中也提到了华为 offer 发放制度,并建议应届生朋友们不要all in 华为,因为很容易让自己变的非常被动,没有任何回旋余地的那种被动。
结果评论区就出现某位华为在职员工,直言"某部门面试通过400+人,最后offer发出去10+封,90%的人都淹死在池子里了",如下图:
这里也是再次奉劝那些想要all in华为的人,可能真的会被"淹死"在offer池中。
这里分享一份 24 届同学的华为秋招面经,他面试的是华为 2012 部门,并最终拿到了offer,这里分享一下他的一面面经,其中的我代表这位学弟本人。
你好,面试管,我是xxx,我就读于xxx,balabalbalba
当时我只说了并发、难易程度、跨平台这些,后来自己回去补了其余区别,做了汇总,下面是C++和Go的主要区别:
new和delete操作符,或智能指针来管理内存。| 名称及含义 |
|---|
| Linux: |
| 信号:类似进程间的信号处理 |
| 锁机制:互斥锁、读写锁和自旋锁 |
| 条件变量:使用通知的方式解锁,与互斥锁配合使用 |
| 信号量:包括无名线程信号量和命名线程信号量 |
| Windows: |
| 全局变量:需要有多个线程来访问一个全局变量时,通常我们会在这个全局变量前加上volatile声明,以防编译器对此变量进行优化 |
| Message消息机制:常用的Message通信的接口主要有两个:PostMessage和PostThreadMessage,PostMessage为线程向主窗口发送消息。而PostThreadMessage是任意两个线程之间的通信接口。 |
| CEvent对象:CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步,这个主要是实现线程直接同步的一种方法。 |
申请方式不同
申请大小限制不同
申请效率不同
栈空间默认是4M, 堆区一般是 1G - 4G
如果父进程先退出,子进程还没退出,那么子进程的父进程将变为init进程。(注:任何一个进程都必须有父进程)。
一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
相比于线程来说,它所占用的资源更小的。一个线程可以有多个协程;线程进程可以看作是同步机制,而协程非阻塞模式。
和channel的组合能让开发的过程中不会太过于去考虑事物的并发控制,因为通过 channel 可以进行控制,它们其实共享了一些资源,所以他们其实可以通过共享内存的方式去进行相关的交互。相对比起线程的加锁机制来说,协程的效率会更高一些。
补充
协程大小相对于线程来说更小,大小只有2k,内存中可以允许有更多的携程来处理并发任务
协程的上下文切换不哦那个由用户态切换到内核态,且保存的寄存器值更少,所以切成切换的开销更小,效率更高
go语言在语言层面go语言的的runtime内置了协程调度器,整体通过gmp模型高效的调度goroutine的运行
用过,defer是Go语言中的一个关键字,它用于注册延迟调用。这些调用直到return前才被执行,它可以用来做资源清理。如果多个defer语句,按先进后出的方式执行 。
有时候也会被用到并发和锁场景下,具体如下:
在Go语言中,数组和切片都是用来存储一组相同类型的数据的。
区别:它们的区别主要有两点:
具体来说,数组中的每个元素都有一个固定的内存地址,而切片则是由数组实现的,它只是对原始数组进行了封装。
因此,当使用切片时,我们可以通过修改切片来改变原始数组的内容。
另外,由于数组是值类型,所以函数调用时传递数组时会创建一个新的切片副本,而传递切片则会传递指针或引用。
补充:下面是一个使用切片的示例,演示了如何向切片中添加元素:
package main
import "fmt"
func main() {
// 创建一个切片
numbers := []int{1, 2, 3, 4, 5}
// 向切片中添加元素
numbers = append(numbers, 6)
numbers = append(numbers, 7, 8, 9)
// 打印切片的内容
fmt.Println(numbers)
}
在上述代码中,我们使用[]int语法创建了一个切片numbers,并初始化了一些整数,然后,我们使用append函数向切片中添加元素。通过使用切片,我们可以动态地添加和删除元素,而不需要事先指定切片的长度。
需要注意的是,切片是基于数组的一种封装,它提供了更便捷的操作和灵活性。切片的底层是一个指向数组的指针,它包含了切片的长度和容量信息。
三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。
进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。
初始状态:客户端处于 closed(关闭)状态,服务器处于 listen(监听) 状态。
第一次握手:客户端发送请求报文将 SYN = 1同步序列号和初始化序列号seq = x发送给服务端,发送完之后客户端处于SYN_Send状态。(验证了客户端的发送能力和服务端的接收能力)
第二次握手:服务端受到 SYN 请求报文之后,如果同意连接,会以自己的同步序列号SYN(服务端) = 1、初始化序列号 seq = y和确认序列号(期望下次收到的数据包)ack = x+ 1 以及确认号ACK = 1报文作为应答,服务器为SYN_Receive状态。
那么问题来了,两次握手之后,站在客户端角度上思考:我发送和接收都ok,服务端的发送和接收也都ok。但是站在服务端的角度思考:哎呀,我服务端接收ok,但是我不清楚我的发送ok不ok呀,而且我还不知道你接受能力如何呢?所以老哥,你需要给我三次握手来传个话告诉我一声。
你要是不告诉我,万一我认为你跑了,然后我可能出于安全性的考虑继续给你发一次,看看你回不回我。
第三次握手:客户端接收到服务端的 SYN + ACK之后,知道可以下次可以发送了下一序列的数据包了,然后发送同步序列号 ack = y + 1和数据包的序列号 seq = x + 1以及确认号ACK = 1确认包作为应答,客户端转为established状态。(分别站在双方的角度上思考,各自ok)
场景为一个班级成绩表,将sex为male何female的区分开来,要用 group by
SELECT sex, COUNT(*) as total_students, AVG(score) as average_score
FROM grades
WHERE sex IN ('male', 'female')
GROUP BY sex;
这里划重点!!!
我 tm 直接表忠心,表示认可华为的狼性文化,希望能通过努力奋斗实现自己的价值2333

你好,我是阿秀,普通学校毕业,校招时拿到字节跳动SP、百度、华为、农业银行等6个互联网中大厂offer,毕业后先于抖音部门担任全栈开发工程师,目前在上海某外企带领团队继续从事全栈开发,负责的项目顺利盈利 300w+。
研三快毕业那年就组建了一个阿秀的学习圈,一直持续分享校招/社招跳槽找工作的经验,都是自己一路走过来的经验,目前已经累计服务超过 3800 +人,欢迎点此了解一二。
原文作者:拓跋阿秀;如有侵权,请联系管理员删除。