百度个人网盘一面
时间:07.29下午五点
方式:电话面
部门:百度个人网盘
岗位:后端方向
面试官性别:女(因为第一次遇到女面试官,所以着重强调下!)
时长:40分钟左右
1. 自我介绍(自己balabala大概14分钟)
2. 选择一个难点或者创新点的地方(到这里大概20分钟了),会根据你的回答,问你某个方面怎么实现的,为什么这么做,我相信都是自己做的项目,基本上都能答出来滴!
3. 既然你的主要语言是C++,问你几个C++的问题。C++中类的封装讲一下?
答:封装可以隐藏实现细节,使得代码模块化;封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。在面向对象编程上可理解为:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
4. C++中const介绍一下?
答:const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。
C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。
5. 进程和线程有什么区别?
答:
1) 根本区别:进程是操作系统资源分配的基本单位,而线程是CPU调度和执行的基本单位。
2) 开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
3) 环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
4) 内存分配:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。
5) 包含关系:只有一个线程的进程可以看做是单进程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
6.线程中的同步方式有哪几种,介绍下?
答:
1) 互斥锁(Mutex)
互斥量是最简单的同步机制,即互斥锁。多个进程(线程)均可以访问到一个互斥量,通过对互斥量加锁,从而来保护一个临界区,防止其它进程(线程)同时进入临界区,保护临界资源互斥访问。
2) 条件变量(condition variable)
条件变量适合多个进程(线程)等待同一事件发生,然后去干某事。举一个简单的例子:生产者和消费者模型:
多个消费者去等待生产者生产物品,消费者去消耗物品。当生产者生产出来一件物品时,便可以通知所有的消费者(当然也可以只通知其中一个等待的消费者)---可以去消耗物品了。这时多个消费者便去争抢物品,谁快谁拿到物品消耗。当物品被消耗完时,消费者就等待生产者。就类似于这样的场景。
条件变量必须配合互斥量一起工作。为什么?因为生产者生产出来的物品是临界资源,即所有进程和线程都可以使用的公共资源,则在一个时刻仅允许一个消费者去取。这时便使用互斥量去保护临界资源
3) 读写锁(reader-writer lock)
读写锁适合于使用在读操作多,写操作少的情况,比如数据库。读写锁读锁可以同时加很多,但是写锁是互斥的。当有进程或者线程要写时,必须等待所有的读进程或者线程都释放自己的读锁方可以写。数据库很多时候可能只是做一些查询。
4) 信号量(semaphore)
在生产者消费者模型中,对任务数量的记录就可以使用信号量来做。可以理解为带计数的条件变量。当信号量的值小于0时,工作进程或者线程就会阻塞,等待物品到来。当生产者生产一个物品,会将信号量值加1操作。 这是会唤醒在信号量上阻塞的进程或者线程,它们去争抢物品。
7. 场景题:比如有很多银行:中国,建设,交通等银行,现在在一个网站中,输入“建设”关键字,自动提示关于建设的所有信息。(这个题目我记得不太清楚了,所以描述的不准确,大家可以忽略它。。)(这个题没明白啥意思,直接说不了解)
8. 场景题:在海量数据中快速查找一个数(或者字符串)是否出现,(数据无序,查找时间在秒级内)
答:推荐:https://blog.csdn.net/yxccc_914/article/details/53737446
9. 面试官:今天就到这里吧!(到这里40分钟)