2019秋招|菜鸟C++工程师秋招面经分享(下)

微信扫一扫,分享到朋友圈

2019秋招|菜鸟C++工程师秋招面经分享(下)

上篇: 2019秋招|菜鸟C++工程师秋招面经分享(上)

Linux

命令作用pwd显示当前目录rm删除touch生成文件cat读取指定文件的内容并打印到终端输出mkdir新建目录make directoryfile查看文件类型whereis,which,find 和 locate查找chown改变文件所有者df查看磁盘容量wc计数工具tr删除一段文本信息中的某些文字。或者将其进行转换join连接两个文件paste它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开


  • grep、awk、sed掌握程度?
  • grep命令用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件。
  • sed用于过滤和转换文本的流编辑器。
  • AWK是一种用于处理文本的编程语言工具。
  • Linux是如何避免内存碎片的
  • 伙伴算法,用于管理物理内存,避免内存碎片;
  • 高速缓存Slab层用于管理内核分配内存,避免碎片。
  • 文件权限的查看与修改?
  • 文件权限查看ls -l,查看文件所有者,所属组,其他的文件权限,rwx为777
  • 修改使用chmod命令
  • Linux如何打开一个文件?如何处理一个正在动态增长的文件?
  • IO复用的三种方法,poll、epoll和select的特点和区别
    select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。
  • select:是最初解决IO阻塞问题的方法。用结构体fd_set来告诉内核监听多个文件描述符,该结构体被称为描述符集。由数组来维持哪些描述符被置位了。对结构体的操作封装在三个宏定义中。通过轮寻来查找是否有描述符要被处理,如果没有返回。 存在的问题:
  1. 内置数组的形式使得select的最大文件数受限与FD_SIZE;
  2. 每次调用select前都要重新初始化描述符集,将fd从用户态拷贝到内核态,每次调用select后,都需要将fd从内核态拷贝到用户态;
  3. 轮寻排查当文件描述符个数很多时,效率很低;
  • poll:通过一个可变长度的数组解决了select文件描述符受限的问题。数组中元素是结构体,该结构体保存描述符的信息,每增加一个文件描述符就向数组中加入一个结构体,结构体只需要拷贝一次到内核态。poll解决了select重复初始化的问题。轮寻排查的问题未解决。
  • epoll:轮寻排查所有文件描述符的效率不高,使服务器并发能力受限。因此,epoll采用只返回状态发生变化的文件描述符,便解决了轮寻的瓶颈。
  • 为什么使用IO多路复用,最主要的原因是什么?
  • epoll有两种触发模式?这两种触发模式有什么区别?编程的时候有什么区别?
  • 上一题中编程的时候有什么区别,是在边缘触发的时候要把套接字中的数据读干净,那么当有多个套接字时,在读的套接字一直不停的有数据到达,如何保证其他套接字不被饿死(面试网易游戏的时候问的一个问题,答不上来,印象贼深刻)。
  • GDB调试
  • Linux进程和线程如何创建、退出?进程退出的时候,自己没有释放的资源(如内存没有free)会怎样?

数据库

  • 存储过程
    我们常用的关系型数据库是MySQL,操作数据库的语言一般为SQL语句,SQL在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成某种特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对面向对象方法的模拟,它允许控制数据的访问方式。 ==存储过程的优点:==
  • 存储过程增强了SQL语言的功能和灵活性:存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
  • 存储过程允许标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且可以随时对存储过程进行修改,对应用程序源代码毫无影响。
  • 存储过程能实现较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。
  • 存储过程能减少网络流量:针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织成存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
  • 存储过程可被作为一种安全机制来充分利用:系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
  • 索引
    索引(Index)是帮助MySQL高效获取数据的数据结构;在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,可以在这些数据结构上实现高级查找算法,提高查询速度,这种数据结构,就是索引。 B-Tree 索引:最常见的索引类型,大部分引擎都支持B树索引。 HASH 索引:只有Memory引擎支持,使用场景简单。 R-Tree 索引(空间索引):空间索引是MyISAM的一种特殊索引类型,主要用于地理空间数据类型。 Full-text (全文索引):全文索引也是MyISAM的一种特殊索引类型,主要用于全文索引,InnoDB从MySQL5.6版本提供对全文索引的支持。
  • 事物是什么?
    事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,由一条或者多条sql语句组成,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
  • acid特性?
  • 原子性(Atomicity):指整个数据库事务是不可分割的工作单位。只有事务中所有的数据库操作都执行成功,整个事务的执行才算成功。事务中任何一个sql语句执行失败,那么已经执行成功的sql语句也必须撤销,数据库状态应该退回到执行事务前的状态。
  • 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束,也就是说在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏
  • 隔离性(Isolation):隔离性也叫做并发控制、可串行化或者锁。事务的隔离性要求每个读写事务的对象与其它事务的操作对象能相互分离,即该事务提交前对其它事务都不可见,这通常使用锁来实现多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
  • 持久性(Durability):表示事务一旦提交了,其结果就是永久性的,也就是数据就已经写入到数据库了,如果发生了宕机等事故,数据库也能将数据恢复。
  • 数据库中的“主属性”、“码”、“主码”的区别是什么?
  • 在数据库的表(关系)中能够用于唯一区分开每个记录(元组)的属性或属性的集合,我们称之为码(候选码)。
  • 当我们指定其中一个用来区分开每个记录(元组)的码为主码。
  • 主属性是指包含在候选码中的属性。 换句话说:主码和码的关系就像班长和班长候选人之间的关系。 每个班长候选人,我们可称之为主属性,只不过在数据库中,候选码可能是多个属性共同组成的。

设计模式

参考资料:《设计模式之禅》,简要了解一下即可

  • 23种设计模式
    单例模式程序的实现

软件工程

  • 软件的健壮性是指什么?
    健壮性是指程序可以适应正常和非正常的运行环境,都可以正确地运行;随着业务量的增加,不会出现阻塞和不可用的情况。 影响程序健壮性的因素
  • 没有容错控制 2.执行耗时的操作
  • 执行复杂的任务
  • 数据不一致
  • 算法效率低
  • 不能应对大流量冲击

什么是正确性

  1. 不可重入的任务被重入
  2. 没有前置状态判定
  3. 没有遵守“受理—处理—关闭”AHC模型
  4. 没有遵守“申请—前置审批—审批—善后—完成”RPC模型
  5. 数据库复制造成数据延迟

智力题

  • 100层楼,2个鸡蛋,鸡蛋从某一个临界楼层丢下会摔碎,请设计方案,能用最小的次数找到临界楼层
  • 用3,4,5,6,7,8组成不重复的4位奇数,按照从小到大的顺序排序,第62个数字是?
    首先是奇数的话,末位只能是3,5,7中的一种,则有$C_{3}^{1}$种方法。前面3个数是$A_{5}^{3}$排列方法,那么总的方法数为$C_{3}^{1}×A_{5}^{3} = 180$种方法,组成的奇数按照从小到大排序。当第一位是3的时候,末位一定是5或者7,那么这样的数一共有$C_{2}^{1}×A_{4}^{2} = 24$种方法,当第一位是4的时候,末位一定是3或者5或者7,这样的数一共有$C_{3}^{1}×A_{4}^{2} = 36$种方法,那么这里一共就有$24+36=60$种方法,当第一位是5的时候,末位一定是3或者7,取较小的数,第二位是3,最后一位是7,那么第61个数是5347,第62个数为5367.
  • 24点游戏
  • 25匹马,5个跑道,如何通过最少的比赛次数确定前3名?
  • 一家人过桥问题

与作者交流:

https://www.
nowcoder.com/discuss/12
5248

更多笔经面经:

https://www.
nowcoder.com/discuss?
order=3&type=2

2019秋招|菜鸟C++工程师秋招面经分享(上)

上一篇

用隐藏语义分析(LSA)进行主题建模(附Python代码)

下一篇

你也可能喜欢

2019秋招|菜鸟C++工程师秋招面经分享(下)

长按储存图像,分享给朋友