ITPub博客

首页 > 数据库 > 数据库开发技术 > 刚刚决定!放弃飞书,冲京东!

刚刚决定!放弃飞书,冲京东!

原创 数据库开发技术 作者:皇子谈技术 时间:2024-03-26 16:36:15 0 删除 编辑

网址:https://itgogogo.cn

大家好,我是皇子。

我从去年到现在,飞书算使用比较多的一个工具了,从知识库到个人空间,在文档、表格、思维笔记方面的体验挺好的。


就在今天中午,一位在找实习的同学,看到飞书CEO谢欣发布全员信后,决定放弃飞书了。

在全员信中,CEO谢欣表示,团队规模比较大、组织不够精干,效率变低,不利于业务的长期发展。

“这一次调整,不仅是团队规模的调整,更重要的是要重新回到初创公司的day1状态---方向更聚焦、组织更高效,团队也要更有战斗力。”

谢欣还强调,飞书在未来“要持续提升产品竞争力,尤其要提升AI的能力”。

▲ 飞书CEO谢欣


飞书,让一部分团队先飞起来

这一部分飞起来是使用飞书的那些企业团队,在团队协作方面更加高效了

另外一部分飞起来是不是跟今天的宣布也有关系?自己的团队要裁员了!要精简团队规模,进行新一轮组织调整了。

不过在全员信称:会为受到影响的员工提供补偿方案和转岗机会的。

相信飞书不会辜负那些一起奋斗过的同学的。


那既然选择放弃飞书(实际上是飞书放弃了你),那京东如何呢?

京东曾宣布,2024年1月1日起京东采销等一线业务人员的年固定薪酬大幅上涨近100%,2024年初京东零售全员将平均加薪不低于20%。

年初还突然发布了一则好消息:自2024年2月1日起,超2万名京东一线客服员工实现全年平均薪酬上涨超过30%。

强哥给的这福利,简直就是给了兄弟们一颗定心丸!


所以接下来,就分享一位京东零售、京东后端开发工程师的暑假实习校招面经,她进去稍微晚一点,这波福利没赶上,看来只能等明年了。

从官网中可以看到,京东集团面向实习生是全年开放的。

这次面经考察的内容,我帮大家罗列一下:

  • Golang:GMP的调度流程、单元测试框架
  • Linux:用户空间和内核空间、进程、线程、协程
  • 计算机网络:计算机网络体系结构、数据在各层之间的传递过程
  • 算法:判断链表是否包含环、判断两个链表是否相交

Golang


GMP的调度流程

  • G(Goroutine):我们所说的协程,为用户级的轻量级线程,每个 Goroutine 对象中的 sched 保存着其上下文信息。
  • M(Machine):对内核级线程的封装,数量对应真实的 CPU 数(真正干活的对象)。
  • P(Processor):即为 G 和 M 的调度对象,用来调度 G 和 M 之间的关联关系,其数量可通过 GOMAXPROCS()来设置,默认为核心数。

单元测试框架

Golang 的 convey 第三方库,一个为 Go 语言设计的 BDD(行为驱动开发)风格的测试框架,它使得单元测试的编写更加直观和易于理解

import (
"testing"
"github.com/smartystreets/goconvey/convey"
)

func TestStringSplit(t *testing.T) {
convey.Convey("当给定一个逗号分隔的字符串", t, func() {
input := "apple,banana,orange"
expected := []string{"apple", "banana", "orange"}

convey.Convey("使用 Split 函数应该正确分割字符串", func() {
result := Split(input, ",")
convey.So(result, convey.ShouldResemble, expected)
})
})
}

// 示例中的 Split 函数是一个假设存在的用于分割字符串的函数
func Split(s, sep string) []string {
// 实现...
}

Linux

用户空间和内核空间

虽然每个进程都有自己的虚拟地址空间,但是为了进一步保障系统运行安全,虚拟地址空间被划分为用户空间和内核空间。操作系统运行在内核空间,用户程序运行在用户空间。内核空间由所有进程的地址空间共享,但是用户程序不能直接访问内核空间。

操作系统保存的进程控制块PCB自然是在内核空间,这里除了页目录以外还可以找到很多重要的内容,例如进程和父进程的ID,状态,打开文件句柄表等等。

进程

  • 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。

  • 有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些子任务称为线程(Thread)。

  • 真正的并行执行多任务(多进程)只能在多核CPU上实现,但是,由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行。

  • 真正地同时执行多线程需要多核CPU才可能实现。由于每个进程至少要干一件事,所以,一个进程至少有一个线程。当然,像Word这种复杂的进程可以有多个线程,多个线程可以同时执行,多线程的执行方式和多进程是一样的,也是由操作系统在多个线程之间快速切换,让每个线程都短暂地交替运行,看起来就像同时执行一样。

线程

  • 多线程中,每个线程有独立的栈,当线程阻塞时,内存数据不会被释放,cpu被释放执行其他线程。

  • 又被称为轻量级进程(Lightweight Process LWP),是程序执行的最小单元。每一个程序都至少有一个线程,若程序只有一个线程,那么就是程序本身。单线程的进程可以简单的认为只有一个线程的进程。一个进程在同一时间只做一件事,有了多线程后一个进程同一时间可以做多件事。每个线程可以处理不同的事务。无论系统有几个CPU,即使进程运行在单CPU上,多线程也可以是进程并发处理多个事务。一个线程阻塞不会影响到另一个线程。多线程的进程可以尽可能的利用系统CPU资源。但也不是线程越多越好,线程越好,CPU分配给每个线程的时间片就越少。

  • 多线程中一个线程阻塞,交出CPU去执行其它线程,单线程阻塞,CPU被占用就像while(1),卡住。

  • 单核cpu多个进程或一个线程内能实现并发(微观上的串行,宏观上的并行),多核cpu线程间可以实现(微观上并行, 宏观上的并行)

协程

从定义上来说,协程是一种轻量级的线程,由用户代码来调度和管理,而不是由操作系统内核来进行调度,也就是在用户态进行。可以直接的理解为就是一个非标准的线程实现,但什么时候切换由用户自己来实现,而不是由操作系统分配 CPU 时间决定。

计算机网络

计算机网络体系结构

  • 应用层:为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。

  • 表示层:数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。

  • 会话层:建立及管理会话。

  • 传输层(运输层):为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。

  • 网络层:为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。

  • 数据链路层:网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。

  • 物理层:考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。

❝

五层协议没有表示层和会话层,而是将这些功能留给应用程序开发者处理。

❝

TCP/IP 协议:它只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。

TCP/IP 体系结构不严格遵循 OSI 分层概念,应用层可能会直接使用 IP 层或者网络接口层。

数据在各层之间的传递过程

在向下的过程中,需要添加下层协议所需要的首部和尾部,而在向上的过程中不断拆开首部和尾部。

路由器只有下面三层协议,因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要传输层和应用层。

数据在各层传递过程及数据格式变化

数据格式变化


算法

  • 判断链表是否包含环(技巧:双指针)

  • 判断两个链表是否相交(技巧:双指针)

推荐阅读

有点意思,她腾讯一面就过了!

简历这样写,加分!保姆级教程

百度,别淘汰程序员,没人用 ping 了

小米有点意思,选择不躺平,冲!

关注公众号,后台发送【简历】,领取简历摸板

觉得有用,点个赞、在看或者转发 在走呀

原文作者:皇子谈技术;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-12-21

  • 博文量
    113
  • 访问量
    56528