百度搜索架构部面经

一面

面试地址:https://www.showmebug.com/pads/CFSENB
上来先自我介绍,问了一下机器学习项目,使用的框架是自己写的还是直接用的?

写SQL语句,优化方法?

进程与线程的区别
对数据库熟悉吗?数据库的存储引擎的区别? 感觉区别说少了,他还想听其他的
浏览器输入URL的过程
三次握手的过程,为什么需要三次?
说一说Linux常用命令
前端用过什么框架?

最后问我最后的职业规划?你想做工程还是算法?

问了一下技术栈。

算法题:中序遍历的递归和非递归的版本
链表的反转,自己再也测试测一下

二面:

基础:
C++:
内存分配的方式?

  • 1. 从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储。
  • 2. 在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限。
  • 3. 在堆区分配:动态分配内存。用new/malloc时开辟,delete/free时释放。生存期由用户指定,灵活。但有内存泄露等问题。

栈和堆的区别
虚函数及其作用?哪些函数不能当虚函数
熟悉什么设计模型,写代码

数据库:索引,以及区别

操作系统:进程间通信机制,cpu调度算法

计算机网络:cookies和session的区别? 一次允许发送多次session吗?

算法一:
//一个有N个整数的一维数组(A[0],A[1],A[2],……,A[n-1]),这个数组中有很多子数组,求子数组之和的最大值是什么?
//1)连续的子数组;
//2)只需得到最大值即可;
//3)整数,可能包含正整数、负整数、零。
//例子:[1,-2,3,5,-3,2]

def MaxSum(A, n):
  count = 0
  res = float('-inf')
  for i in range(n):
      count += A[i]
      res = max(res, count, A[i]) 
//     if count < 0:
//         count = 0
            
  return res

或者: 
  tmp = max(count+A[i], A[i])
  res = max(tnp, res)   
  

算法二:
//给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
//注意:答案中不可以包含重复的三元组。
//示例:
//给定数组 nums = [-1, 0, 1, 2, -1, -4],
//满足要求的三元组集合为:
//[
// [-1, 0, 1],
// [-1, -1, 2]
//]

class solution:
  
  def helper(nums):
    if len(nums) < 3: return []
    res = []
    N = len(nums)
    nums.sort()  
    for i in range(N):
      for j in range(i+1, N):
        c = nums[i]
        a = nums[j]
        b = -a - c
        lastb = self.binary_search(nums[i+2:], b)
        if b != -1:
              
            res.append([a,b,c])


    def binary_search(self, nums, target):
        low, high = 0, len(nums-1)
        
        while low < high:
            mid = (low+high)//2
            if nums[mid] > target:
                high = mid -1
            else:
                low = mid
        
        return nums[low] if nums[low] == target else -1

你可能感兴趣的:(面经)