四次面试经历,共勉

四次面试经历,足以让我客观地看清自己的能力

看似简单的2019年,不只是政治大年,对我而言更是一个充斥着破折与痛苦,机遇与挑战,当然还有懒惰与懈怠,但更多的还是对于未来无限可能的希望…因为可能,所以会有希望;因为可能,所以也免不了选择与纠结。

关于读研还是就业,直到现在,也没有明确的答案,就像辅导员说的那样,或许我根本没必要去思考这个问题。但经历更多的挑战,总会让人的生活变得丰富多彩而充满无限可能。

第一次面试

第一次面试是广州某小公司,方向可以说和我想发展的方向完全对口,golang 后端开发。回想起来,这可能是我最值得去尝试的面试,但可惜的是第一次面试没有丝毫的经验。

原本以为,自己的表达能力、项目经历、包括专业对口以及简历上的各种内容都是十分出彩的,心里想的是面试官舍我其谁。但到后来完全是打脸。面试官面得问题让我感觉天昏地暗…

  • redis 基本数据结构和底层实现
  • golang chan 阻塞问题
  • 链表存在环路怎么办
  • golang map 的底层实现
  • cin cout 和printf的区别
  • grpc stream 和 普通使用的区别
  • 前端图片显示
  • 以及常见的计网操统问题

面得一脸懵逼…好像还回怼了面试官几句…为什么要问这些没意思的问题

最终,当然是没有通过…

原本信心满满的面试,却最终有种灰头土脸的感觉,还感觉十分委屈。我渐渐明白了面试的套路…

第二次面试

同样是广州某公司,方向选的后台测试,当时各种相关的实习岗位都投递了实习简历。

之前接触过一点测试的工作,也多少有一些个人的想法和思路。但由于对于自动化测试还是十分陌生,并没有专门学习了解而试验过,只有之前项目中有一些零碎的思路。这次被邀约到公司当面进行面试。

有了第一次的挫折,并没有抱太大的希望,只希望面完试可以不那么难过。约面试时间的时候还出了点小问题,但最终还是成功到达了公司进行面试。

HR小姐姐真的是好人…对我真的特别好,那种感觉是电话里感觉不到的。

是一个帅气的哥哥面试的我,问了些

  • 基础的计网、网络安全问题

有了第一次的经验,多少还是可以回答上来。之后又仔细查看了我的简历,问了关于

  • 项目的一些问题,以及我自己之前的测试思路
  • 并了解了我对于测试工具以及后台架构的了解

后来换了另一个技术人员简单面试,最终是HR面试。

  • 关于工作时间、工作薪酬以及内容、公司情况

整个过程无比轻松,甚至面试官会给我台阶下:”这个问题不常见,你不知道也没关系“。能感觉到面试官小哥哥两眼放光地看着我…当时心里无比的开心。可能这种感觉不是电话面能感受到的,我感觉当面进行面试反而会轻松很多,可以通过眼神、肢体语言进行交流。

第二次当天就成功拿到了offer,还受到了夸奖,心里很开心

第三次面试

第三次本应该是Tencent…但由于给我打电话时刚好在上课,挂掉后便被通知,没被通过面试…

或许这就是大厂吧…真的不缺人才。

于是第三次面试成为了视源…C++开发,讲真的这个岗位并不是很适合我,面试的过程中也并没有准备多少C++的内容,更多还是关于算法。

为了熟悉年底的Bytedance面试,我面视源的时候,选在了Bytedance面试场地,想熟悉一下这个氛围。那天晚上吃了饭就登上网站做题。

  • 入栈出栈顺序
  • linux 启动过程
  • linux conf文件
  • GET和POST参数的问题
  • C++ 虚函数、多态
  • 最终考了两道算法题,都不难。一道链表翻转+排序。一道贪心算法。

由于并没有准备linux方面问题,对于C++的理论知识也极度欠佳,重视程度也不够,虽然感觉算法题并不难,但前面的多项选择题彻底把我搞死了…

又成功收到了未通过面试的消息。

心里堵了一段时间,但很快就过去了。希望最后一次面试能有一个好的结果。

第四次面试

不敢打开那个文件,感觉自己仿佛做了一个愚蠢的梦…


字节跳动——我衷心希望能拥有实习offer

1. 可能面试问题

1.1 常见面试题

  • 计算机网络:传输层
  1. TCP和UDP的区别和联系

    联系:都是传输层的协议。都可以满足进程之间进行通信。

    区别

    • TCP是拥有链接的协议,UDP没有连接。
    • UDP由于没有连接,传输速度会快很多。
    • TCP可以保证传输的可靠性。拥有拥塞控制机制——慢启动、滑动窗口

    TCP容易被攻击,因为需要建立连接。

    TCP对系统的需求更好。

    TCP是流模式,UDP是数据报模式。

  2. TCP报文包括哪些部分?UDP报文包括哪些部分?

    TCP包括:源端口号(16位)、目的端口号、没有版本号、校验和、SYN、SEQ(16位)、ACK、FIN等标志位

    首部长度(4位)、保留位(6)、窗口大小、时间戳

    • 同步SYN ,置为1表示这是一个链接报文。
      在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在相应的报文段中使用SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接受报文。
    • 终止FIN
      用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接
    • 窗口 占2字节。窗口值是【0,2^16-1]之间的整数。窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。窗口值告诉对方:
      从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据。并且窗口值是经常在动态变化着。

    UDP包括:源端口号、目的端口号、校验和、长度(都各占16位)

    伪首部(32位源IP地址、32位目标IP地址、8位协议、16位UDP长度)的作用?

    1. 为了计算校验和 2. 为了通过协议字段检验协议 3. 是否确认IP正确。
  3. TCP的三次握手和四次挥手

    TCP在建立连接之前需要进行三次握手,首先由客户端向服务器提出请求。SYN = 1、SEQ = x;客户端回复SYN = 1 ACK = 1, seq = y, ack = X + 1;。客户端向服务器发送ACK = 1,ack = y+1 seq = x + 1。之后建立连接。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IwxfsvrL-1578917559646)(C:\Users\38267\AppData\Roaming\Typora\typora-user-images\1577690743355.png)]

    四次挥手:由客户端向服务端发送FIN = 1 seq = x, 表示期望终止。 服务端返回ACK= 1, ack = x + 1,seq = y。之后服务端进行closewait。发送FIN, ACK= 1 seq = w, ack = x + 1.客户端返回ack = w + 1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xGMlWgvU-1578917559649)(C:\Users\38267\AppData\Roaming\Typora\typora-user-images\1577690730421.png)]

  1. 为什么要进行三次握手和四次挥手。

    • 因为避免耗费服务端资源。如果只有两次握手。客户端向服务端发送消息后,服务端没有及时收到,客户端关闭了,客户端返回服务端,服务端认为是垃圾报文,不予理会,服务端会一直等待客户端的保温传输,但是这个客户端是不存在的,会造成服务端时间浪费。
    • 四次挥手是因为,在客户端请求关闭链接的时候,客户端已经没有报文要发送了,但是服务端还可以继续接受之前客户端发送的报文。收到客户端的FIN请求之后,服务端还需要继续处理客户端的报文,处理完毕之后再发送FIN给客户端。
  2. 为什么有2MSL的TIME-wait ?

    1.为了保证客户端发送的最后一个ACK报文段可以到达服务器,如果这个报文丢失了,客户端还有机会重传,重启计时器。

    2.经过2个MSL可以保证这次链接所产生的所有报文段都从网络中消失,不会对接下来其他的链接造成影响

  3. 使用TCP的协议有哪些?使用UDP协议有哪些?

    TCP:HTTp、SMTP、

    POP3/HTTPS/SSH/FTP

    UDP:ARP、DNCP、DNS

  4. 什么是套接字?

    套接字是操作系统为应用程序提供的接口,能够实现线程之间的通信,以及跨网络的通信。

    套接字是支持TCP、IP协议的网络通信的基本操作单元,是网络通信过程中端点的抽象表示。套接字的实现部分,就是系统的协议栈部分,包含网络层、传输层等。包含:源IP地址、源端口、目的IP地址、目的端口、协议。

  • 计算机网络:网络层
  1. IP协议头有哪些字段?

    源IP地址、目的IP地址、头部长度4位(一单位代表一个字)、报文长度、协议号、版本号、时间、TTL、

    服务类型TOS(8位)、3位标志(是否分片)、13位片偏移(对于原始IP报文的偏移)

  2. DHCP协议是如何运行的?

    DHCP客户端发送IP地址租用申请,广播方式发出。

    网络中的DHCP服务器回应一个IP地址租用提供,客户端选择第一个DHCP返回的包的DHCP服务器。广播发送DHCPREQUEST消息,通知其他的DHCP服务器放弃,同时通知选中的DHCP服务器,包含申请IP地址。

    最后DHCP服务器会送DHCPACK消息,返回客户端可以使用这个IP地址。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N33tVfyd-1578917559650)(C:\Users\38267\AppData\Roaming\Typora\typora-user-images\1577693680962.png)]

  • 计算机网络:应用层
  1. HTTP头

    cookies、状态码(1开头是不存在、2开头是正确、3开头是重定向、4开头是客户端错误、5开头是服务器错误)

    好多啊

  2. cookie和session的异同

    cookie和session都是用于保存客户状态的,使得客户端每一次访问服务端,服务端都能知道客户端当前所处的事务状态是什么。

    cookie内容主要保存在浏览器中,session主要保存在服务端。

    Cookies以文本的格式存储在浏览器上,存储量有限(4k),而Session存储在服务端,可以无限量存储多个变量,并且比cookie更加安全。

    我们可以轻松访问cookie的内容,也可以在http协议中获取到cookie部分字段

    设置cookie的时间可以使得cookie过期,但是还是用session-destory()可以使得对话销毁。

  3. DNS是什么?

    DNS是域名解析系统,在DNS服务器中保存域名到IP地址的映射。

    当用户在浏览器中输入网址的时候,需要发送DNS数据包进行IP地址的查询。查询的过程包括两种方式:递归查询和迭代查询。递归查询是,先查询本地服务器,本地服务器如果不保存映射,则查询根服务器,再由本地服务器根据根服务器的响应结果IP地址,查询TLD服务器,再根据返回结果,查询权威服务器

    递归方式,是通过根服务器访问TLD,再由TLD服务器访问权威服务器。

  • 计算机网络:数据链路层**
  1. ARP表是如何建立起里的,跨网段ARP表如何建立起来

    首先拿到IP地址,获取对应ip地址的mac地址。广播ARP请求报文ff-ff-ff-ff,如果有知道这个IP -》 mac映射的,就返还自己的mac地址给请求方,请求方更新自己的ARP表,写入映射。

    跨网段:在本地网络内发送ARP请求报文,IP地址为目的ip,但mac地址为网关mac地址。网关路由器收到之后,建立一个mac帧,并查询转发表,转发给目的主机所在的网段,目的主机收到后,返回自己的mac地址给请求方。

  2. ARP报文包括

    硬件类型、协议类型、发送方MAC、发送方IP、目标MAC、目标IP、协议长度

  • 操作系统原理:线程进程
  1. 线程和进程的区别

    线程是CPU调度基本单位,是进程的一个可调用实体。一个进程可以包含多个线程。线程之间不共享栈区、CPU上下文,共享代码段,堆区,静态区。

    进程是程序的一次执行过程。包含五种基本状态。

    进程是操作系统分配资源的基本单位。

    进程切换要比线程切换开销大很多。线程占用资源比进程占用资源小很多。

    线程之间存在同步、互斥、共享进程的所有资源、进程的创建时fork、线程的创建时pthread_cereate

    操作系统最多运行多少线程?一个线程的栈预留1M个线程,同时运行的线程需要取决CPU核的个数,可以开启8 G / 1 M 个线程。

  2. 并行和并发

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GTecXhH0-1578917559652)(C:\Users\38267\AppData\Roaming\Typora\typora-user-images\1578395866675.png)]

  3. 进程之间如何通讯?

    共享内存:两个进程的页表指向物理内存的同一个地址。作为临界区,需要使用信号量来进行临界区数据访问。

    消息传递:管道,不同进程之间使用read、write方式进行通信。unix提供系统调用pipe -》 联想到golang

    1.管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在有血缘关系的进程间使用,进程的血缘关系通常是指父子进程关系。
    2.命名管道(named pipe):也是半双工的通信方式,但是它允许无亲缘关系关系进程间通信。

    3.信号(signal):是一种比较复杂的通信方式,用于通知接收进程某一事件已经发生。
    4.信号量(semophere):信号量是一个计数器,可用来控制多个进程对共享资源的访问。它通常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

    5.消息队列(message queue):消息队列是由消息组成的链表,存放在内核中,并由消息队列标识符标识。消息队列克服了信号传递消息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

    6.共享内存(shared memory):就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问,共享内存是最快的IPC方式,它是针对其他进程间的通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量等配合使用,来实现进程间的同步和通信。
    7.套接字(socket):套接口也是进程间的通信机制,与其他通信机制不同的是它可用于不同及其间的进程通信。

  4. 线程之间如何通讯?

    线程之间,使用wait()、signal()进行通信、signal

    确保wait的时候已经拿到了锁,不然会死锁。

    1. 信号量机制:wait();signal
    2. 锁机制。
  5. 用户态和内核态怎么通信?

    内核态使用printk可以直接将消息传递到用户态。

    用户态通过系统调用,kill、open、write等,与用户态进程通信。

    1. 系统调用

    通过调用c库里的pritnf,使用syscall的形式来进行系统调用。

    1. 虚拟文件系统

    在proc/文件目录下,保存内核的所有信息。

    输出只读目录。

    1. sysctl接口

    proc/sys

    大部分是可写的。

    1. netlink

    本质上是一种socket

  6. 写一个生产者、消费者模式。

    信号量empty和full

    使用mutex互斥信号量、加锁

    //生产者
    
    empty.value == 队列长度。
    have.value == 0
    mutex.value == 1 互斥信号量。
    
    void wait(s * Sem){
    	s.value --;
    	if(s.value < 0){
    		//增加当前线程到等待队列
    		block();//阻塞
    	}
    }
    
    void signal(s * Sem){
    	s.value ++;
    	if(s.value <= 0){//有人等着
    		//唤醒队列头
    		wakeUp(P);
    	}
    }
    //生产者
    void produce(){
    	while(true){
            wait(empty); //如果等于0,表示没位置,需要阻塞。
            wait(mutex);
            queue.push(value);//访问临界区
            signal(mutex);
            signal(have);
    	}
    }
    
    //消费者
    void consume(){
    	while(true){
    		wait(have);
    		wait(mutex);
    		queue.pop(value);//访问临界区
    		wait(mutex);
    		signal(empty);
    	}
    }
    
    
  7. 读者写者问题:

    对于读者优先:每次需要记录下来当前读者数目。当前读者数目!=0时,读者无需等待。当前读者数目==0时,写者才能被释放。

  8. 阻塞和忙等待

    忙等待则没有上下文的切换,一直进行轮询,非常消耗CPU。

    阻塞需要切换上下文,消耗时间。

    当任务较难、停留时间长的时候,使用阻塞较好,节省CPU。

    当任务较简单、等待时间短的时候,使用忙等待可以提高速度,避免CPU上下文频繁切换。。

  9. 同步和互斥

    互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

    同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。

    同步其实已经实现了互斥,所以同步是一种更为复杂的互斥。

    互斥是一种特殊的同步。

  10. 死锁相关

    1. 定义:占有并等待 + 循环等待叙述

    2. 四个条件:占有并等待、循环等待、资源互斥、不可抢占

    3. 解除方法:破坏掉四个中的一个资源

      1. 破坏1:一次申请完所有资源:会很浪费
      2. 破坏2:编号pid,必须占有比自己大的或者小的。
      3. 破坏3:全都可以访问,全都可以共享:不可实现
      4. 破坏4:得不到满足就立刻释放:较为复杂。
    4. 死锁检测:资源分配图是否出现环路。有可能有死锁

    5. 死锁解除:

      1. 资源剥夺
      2. 杀死撤销进程
      3. 进程回退
    6. 死锁避免:

      银行家算法,每次分配之前先计算这样操作会不会影响安全性。

  11. B/S和C/S 的区别

    浏览器/服务器:前端交互在浏览器、事务处理和数据操作都是在服务端。效率低下,但耦合性低,容易维护。一般网页服务器都是这种架构,服务端有两层:逻辑层和数据层。

    C/S:客户端服务器:客户端需要用户界面交互、处理事务。服务端主要进行数据的存储。

  • 后端素养
  1. SQL语句

    网址

    create database basename
    drop database base name
    use master
    create table tabneame
    create table new like tableold
    alter table tablename 
    create view as 
    索引创建 create index name_index on user(username, userage);
    
  2. 事务隔离

    事务隔离的四种层次和他们的优缺点

    • 读未提交
      • 脏读
    • 读提交
      • 只能读别人提交之后的,一个事务范围内查询会出现不同结果。
    • 重复读
      • 不能insert但看可以update,会出现幻读问题。
    • 序列化
      • 完全序列化事务,效率低。
  3. ACID

    原子性、一致性、隔离性、持久性。

  4. 索引是什么

    对一列或者多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。索引建立后不能修改原始字段,否则索引无效。

  • 系统分析
  1. MVC架构

    模型(Model):负责存储系统的中心数据。

    视图(View):将信息显示给用户(可以定义多个视图)。

    控制器(Controller):处理用户输入的信息。负责从视图读取数据,控制用户输入,并向模型发送数据,是应用程序中处理用户交互的部分。负责管理与用户交互交互控制。

    模型和数据共同构成用户接口。

    MVC重要特点就是两种分离:

    视图和数据模型的分离:使用不同的视图对相同的数据进行展示;分离可视和不可视的组件,能够对模型进行独立测试。因为分离了可视组件减少了外部依赖利于测试。(数据库也是一种外部组件)

    视图和表现逻辑(Controller)的分离:Controller是一个表现逻辑的组件,并非一个业务逻辑组件。MVC可以作为表现模式也可以作为建构模式,意味这Controller也可以是业务逻辑。分离逻辑和具体展示,能够对逻辑进行独立测试。

  • golang实践
  1. redis

    消息队列:直接使用list pop push

    分布式锁:setnx lock.id指令可以获取锁,但有可能因为网络原因出现死锁。

    ​ 需要设定一个超时时间,再设置一个时间戳=当前时间+1,每次获取锁都判断是否超时,如果超时再判断时间戳是否小于当前,如果小于当前再delete锁并获取。getset函数

  2. grpc

  3. MAP

  4. MPG架构

  5. channel

  6. 关键字:defer/select、

  • 程序设计
  1. 面向对象和面向过程的区别

    面向过程是按照解决问题的步骤一步步编写代码,然后一步一步执行解决问题

    面向对象是将构成问题的事务抽象成一个个对象,描述事务做某个事情的行为。

  2. 面向对象的三个特征

    封装、继承、多态

1.2 算法内容

  • 排序算法
  1. 快速排序
  2. 归并排序
  3. 堆排序
  • 搜索算法
  1. 搜索树
  • 动态规划
  • 技巧
  1. 判断链表存在环
  2. 交换链表方向
  3. 用栈实现队列

押题

思路引领

  1. 操作系统

    • 进程、线程:
  2. 计算机网络

    • 网络通信:
  3. 分布式系统

学科:
计网、操统、算法导论、数据结构、信安、数据库

实操:
C++算法、golang基础语法、掌握WEB后端开发技术: 协议、架构、存储、缓存、安全等;

面试题型:说说tcp和udp的区别。线程和进程的区别http和https的区别(和信安结合)。打一个深度优先遍历。

开拓思路:什么好、什么不好、编程习惯。

学习方法:

  1. 复习笔记、ppt
  2. 打一打C++的基本算法题目
  3. 牛客网刷题、看面试经验。
  4. GoOnline后台IDE代码读一遍
  5. GIN框架、Docker相关、Grpc相关。

岗位描述:

1、协助设计和开发企业级办公协同及创作工具类产品运行的核心系统;
2、负责协助高质量的设计和编码;
3、主要语言为Python/Golang。

岗位要求:

1、良好的设计和编码品味,热爱写代码;
2、较好的产品意识,愿意将产品效果做为工作最重要的驱动因素;
3、掌握WEB后端开发技术: 协议、架构、存储、缓存、安全等;
4、积极乐观,认真负责,乐于协作。

http协议头、TCP、UDP、IP
docker调试
redis底层架构、常见数据类型
如何判断链表中有环
图片如何在前端展示。
grpc:stream和简单模式的区别、grpc的优点、grpc底层
cin cout 和 printf 的区别
golang的后端框架
go程之间通信
channel:什么时候会阻塞?
哈希的底层

go语言 分片和list的区别

linux文件系统?


谁知道呢,过去了终究是过去了。事实是准备的问题几乎没考,考的就算我会做,在当时的情况下,我大脑一片空白…

面试官敲键盘的声音真的好大,面试官说话的声音真的好小。我把声音开到最大还是听不清,只能听清他在哒哒哒敲键盘。

  • 函数完善:C++

    题目并不难,但我有问题,询问了面试官之后,他说的话我一句都没听清

    再次询问,很多次之后,我渐渐放弃了…我感觉很绝望,我真的听不清要求

    他只好把题目打在屏幕上…

  • TCP小报文优化,我真的不会做

  • golang 实现map,我死了,我一直以为他让我用golang写算法…我错了,要怪就怪自己基础知识不扎实吧

  • TCP拥塞控制:这个还好,回答上来了。

  • sql题目…我看都看不懂。听他说也听不清, 我死了…

  • dbq触及到我知识盲区和认知盲区了。

  • 然后…网莫名其妙断开了…再连上,面试官已经离开了…

考的几乎都是我没有任何准备的东西,加上听不清面试官说的话,全程发呆…

意识到自己凉了,突然不想继续面试了,但也要装作思考的样子…面试官在干自己的事情,也并没有在乎我有没有思路…

关于项目经历没有丝毫提及,尽管我死命拿回讲话权,但奈何能力不足,无法获得话语权,全程被面试官拖着走…努力往我的实际经历上面靠拢,而面试官对我的经历丝毫不感兴趣,甚至可能根本没有看过我的简历…或许大厂就会这样吧,小公司会更看重项目经历以及软实力,会认真读我的简历的每个细节问我,而大公司可能只看重硬实力,像我这样半瓶子醋的肯定过不了的…

想知道这段时间自己究竟在干什么,才会有这样难以启齿的结果,也想知道究竟怎样才能成为市场真正需要的“人才”,想知道,自己是差在哪里,差在才智?差在基础?差在实践?我相信时间会给予我答案。

以下是几点感慨:

  • 从小到大,相信有很多人也和我一样,一路顺风顺水,没遇到过什么困难挫折,没吃过什么苦,一路都是赞许、鲜花、掌声,反而没有任何准备地跌倒在将要步入社会的第一个门槛。
  • 高考真的很不错。高考,有高考大纲,有历届考题,有老师,有共同奋斗的同时,连高考的考场,都是那么统一化,尽可能把不确定性降到最低,而面试呢,谁会在意你能不能听清面试官的考题,也没有人会在意当时你是不是在上课。
  • 我有时总会自负地想,如果我都做不出来,能有多少人做出来,公司难道能找到这样的人才么…然而我的想法太过可笑了。“阿里每年向社会输出一千名工作十年以上的优秀人才”,如此真实的,就是我们将要面对的竞争与压力。
  • 这个学期强忍住三次眼泪,一次给了繁重的课程,一次给了未来的生活,一次给了社会给予我的挫折。而我真心希望,自己能

的确,才大三,几次面试的失利没什么…也希望把自己的经历与读者共勉

发布了19 篇原创文章 · 获赞 8 · 访问量 5941

猜你喜欢

转载自blog.csdn.net/forevermoonlight/article/details/103963672