腾展科技 - C++实习 - 一面 面经

1. 自我介绍

(开放性问题,候选人应包含教育背景、技术栈、项目经验,控制在2分钟以内)

2. Linux系统的目录结构是怎样的?常用目录分别存放什么内容?

参考答案:Linux采用树形目录结构,根目录为/,常见目录含义:

  • /bin:存放基本命令,如ls、cp、mv等
  • /etc:存放系统配置文件
  • /home:普通用户的主目录
  • /var:存放日志、缓存等动态数据
  • /tmp:临时文件,重启后清空
  • /usr:用户程序和库文件
  • /dev:设备文件,如磁盘、终端
  • /proc:虚拟文件系统,反映系统运行状态
  • /root:root用户的主目录
  • 与Windows区别:Linux一切皆文件,没有盘符概念,路径用/分隔,Windows用\分隔

3. 版本控制系统的作用是什么?Git和SVN有什么区别?

参考答案:版本控制系统用于管理代码变更历史,支持多人协作开发:

  • 核心作用:记录每次代码修改、支持回退到历史版本、多人并行开发不冲突、追踪谁在什么时候改了什么
  • Git是分布式版本控制:每个开发者本地都有完整的仓库,可以离线提交,速度快
  • SVN是集中式版本控制:只有一个中央服务器,必须联网才能提交,服务器宕机则无法工作
  • Git优势:分支创建和合并成本极低、离线工作、速度快、社区生态好
  • 常用平台:GitHub(全球最大代码托管平台)、Gitee(国内)、GitLab(企业自建)

4. 如何使用Git从远程仓库获取代码?克隆和拉取有什么区别?

参考答案:获取远程代码有两种场景:

  • git clone:第一次获取项目,将远程仓库完整复制到本地,包含所有历史记录和分支 使用方式:git clone 仓库地址,会在当前目录创建同名文件夹支持HTTPS和SSH两种协议
  • git pull:已有本地仓库,获取远程最新更新并合并到当前分支 本质是git fetch + git merge的组合使用前需要先clone过仓库
  • 从GitHub下载代码还可以直接点击Download ZIP,但这种方式不包含Git历史记录,无法进行版本管理
  • SSH方式需要提前配置公钥到GitHub账户,HTTPS方式需要输入账号密码或Token

5. Linux和Windows在使用场景上有什么本质区别?

参考答案:两者定位和设计理念不同:

  • 开源与闭源:Linux开源免费,任何人可以查看修改源码;Windows是商业软件,需要付费授权
  • 稳定性:Linux服务器可以运行数年不重启,Windows需要定期更新重启
  • 使用场景:Linux主要用于服务器、嵌入式设备、开发环境;Windows主要用于桌面办公和游戏
  • 命令行:Linux以命令行为核心,操作高效;Windows以图形界面为主
  • 权限管理:Linux权限体系更严格,普通用户权限受限;Windows权限管理相对宽松
  • 文件系统:Linux常用ext4,Windows常用NTFS;Linux文件名大小写敏感,Windows不敏感
  • 软件生态:Windows软件生态更丰富,Linux开发工具链更完善
  • C++开发:Linux下GCC工具链更成熟,服务器端C++开发基本都在Linux环境

6. Linux下有哪些常用的文件操作命令?

参考答案:Linux文件操作命令是开发必备:

  • 查看文件:ls(列出目录)、ls -la(详细信息含隐藏文件)、cat(查看文件内容)、less/more(分页查看)
  • 目录操作:cd(切换目录)、pwd(显示当前路径)、mkdir(创建目录)、rmdir(删除空目录)
  • 文件操作:cp(复制)、mv(移动/重命名)、rm(删除)、rm -rf(强制递归删除)、touch(创建空文件)
  • 查找搜索:find(按条件查找文件)、grep(在文件中搜索内容)、which(查找命令位置)
  • 权限管理:chmod(修改权限)、chown(修改所有者)
  • 进程管理:ps aux(查看进程)、kill(终止进程)、top(实时监控)
  • 网络相关:ping(测试连通性)、netstat(查看网络连接)、curl(

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++八股文全集 文章被收录于专栏

本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。

全部评论

相关推荐

气笑了,写了半个小时感觉没GPT讲的好,喂给GPT帮我重写了一下,但是有些缩写没说明LCS = Longest Common Subsequence,最长公共子序列LIS = Longest Increasing Subsequence,最长上升子序列BIT = Binary Indexed Tree,树状数组suf[i] = suffix 的缩写,这里表示“从 i 开始的最优长度”给你两个长度为 2e5 的排列 p 和 q,求它们的最长公共子序列中字典序最大的一个。例如:104 7 8 9 5 10 2 1 3 63 2 6 10 8 9 1 4 5 7ans: 8 9 5补了半天,也是补出来了。整体思路其实分两步:第一步,先把 LCS 转化成 LIS。因为 p 和 q 都是排列,所以每个数在 q 中出现的位置唯一。把 p 中每个数替换成它在 q 里的下标,原问题就转化成了求最长上升子序列。第二步,为了方便构造字典序最大的答案,记录每个位置的 suf[i]。suf[i] 的意思是:如果当前选了第 i 个位置,并且把它作为这一段的开头,那么从这里开始最多还能选出多长的合法序列。注意,这个长度是包含当前位置自己的。然后贪心构造答案。从最大的 suf 开始往下做,每次都在当前这一层里选能选到的最大值。这里“能选到”不只是原排列里位置要在后面,还要求它映射到 q 里的位置也在后面。这两个条件都满足,才能保证它仍然是公共子序列。时间复杂度分析:映射下标 O(n)。算 suf[i],本质上还是 LIS 的 DP,可以用二分 / 树状数组 BIT 加速到 O(nlogn)。构造时,把 suf 相同的位置放到同一个桶里,同时记录它们的原值和原下标。每个桶内按值从大到小排序,然后从大到小枚举 suf,顺着扫一遍找第一个合法位置即可。这样排序总复杂度是 O(nlogn),最后构造整体扫一遍是 O(n)。所以总复杂度是 O(nlogn),2e5 可以通过。下面说一下为什么能转成 LIS。最长公共子序列这题,如果两个序列都是排列,那么把其中一个排列里的元素,替换成它在另一个排列中的下标,就可以转成 LIS。核心原因是:“值相同且顺序一致”等价于“映射后的下标严格递增”。这一步成立的关键条件就是:排列里的每个数只出现一次。比如在 p 中选出一个公共子序列:p[i], p[j], p[k]如果它在 q 中也按同样顺序出现,那么它们在 q 里的位置一定满足:pos[p[i]] < pos[p[j]] < pos[p[k]]所以公共子序列就对应着一个上升子序列,LCS 也就变成了 LIS。最后说一下 BIT 为什么能算 suf。这个本质上还是 LIS 的 DP。如果从右往左扫,设 suf[i] 表示以 i 位置开头时最多能选多少个,那么转移就是:suf[i] = 1 + max(suf[j]),其中 j > i 且 p[j] > p[i]也就是:要从右边、并且值比当前大的位置里,找一个最优的接在后面。这个可以用 BIT 维护前缀 max 来加速。因为 BIT 的结构天然适合维护前缀信息,后面的块会汇总前面的信息,而前面的不会被后面的影响。只要维护的是 max 这种可合并的信息,就能像维护前缀和一样维护前缀最大值。而这里值域又正好是 1..n 的排列,所以非常适合直接用 BIT 做到 O(nlogn)。
查看5道真题和解析
点赞 评论 收藏
分享
03-29 16:01
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务