某互联网旅游公司面试 补充更新中

基本流程

面试包括一小时笔试,三轮面试官面试,我面的是云计算相关,对方基本业务是为内部呼叫中心提供云服务,说是有上万个呼叫中心,用嵌入式盒子加显示器做云终端,连接到云上,主要编程语言是python

跟新,现在已经入职,主要是做内部web发布工具,需要的技术栈包括python,django,数据库以及web开发常用技术

笔试

笔试包括选择题,和三道编程题

选择题

主要是一些数学题和逻辑题,数学底子比较好应该没问题

三道编程题

数组中是否存在和为s的两个数

一个数组,判断其中有没有两个数和为s
先排序,两个游标分别指向首尾,可以先判断最小的数是否大于s/2,变少判断,复杂度为O(n*log(n))

动态规划 弱项

一个数组保存硬币面值,求和为S的最小硬币数

第k大的数

m个已经排好序的数组,求这m个数组中第k大得数

一轮面试

比较基础

二轮面试

比较基础,问了些比较软的东西,实习经历相关,实习有什么收获之类的

三轮面试

压力较大,面试官技术很厉害的样子,问你看过哪些书,然后挑你不知道的问,有点挑刺,压力面的味道

面试题目搜集

python里面元组和dict区别

线程和进程

同一进程的不同线程的异同
不同点:

  1. 标示符id
  2. 状态及状态转换,需要提供一些操作
  3. 上下文环境:程序计数器等寄存器
  4. 自己的栈和栈指针

相同点:
共享所在进程的地址空间和其他资源

web服务器相关

你对jungle了解多少

为什么用tornado服务器?

听同学讲的,非阻塞异步io

core dump调试

参考一篇博客文章

core文件

core文件包含程序运行时的内存寄存器状态堆栈指针内存管理信息还有各种函数调用堆栈信息等,可以理解为程序工作当前状态存储生成的一个文件,通过分析工具分析这个文件,可以定位到程序异常退出的时候对应的堆栈调用的信息

如何判断一个文件是否为core文件

readelf -h core

查看type字段
或者:

file core

ulimit设置

ulimit -c [size]
size 含义
0 不产生core文件
n 产生core文件大小为n个block,一个block大小为512bytes
ulimit 大小不限

还有些路径设置相关,需要的时候搜一下

core产生的原因

  • 内存访问越界
  • 多线程程序使用了线程不安全函数
  • 多线程读写的数据没有加锁保护
  • 非法指针
    • 指针转换,字节对齐的问题,比如32位机器int类型数据地址是4字节对齐,一个char类型数据地址1字节对齐即可,如果将一个非4字节对齐的char指针赋给int类型数据指针,会发生什么呢?
  • 堆栈溢出
    • 局部定义一个特别大得数组这种,递归嵌套也可能爆栈

gdb调试core

gdb executivefile corefile

可以看到一些详细的错误信息
注意一些常见的signal含义:

signal 含义
SIGABRT 调用abort函数时产生此信号。进程异常终止。
SIGBUS 指示一个实现定义的硬件故障。
SIGEMT 指示一个实现定义的硬件故障。EMT这一名字来自PDP-11的emulator trap 指令。
SIGFPE 此信号表示一个算术运算异常,例如除以0,浮点溢出等。
SIGILL 此信号指示进程已执行一条非法硬件指令。4.3BSD由abort函数产生此信号。SIGABRT现在被用于此。
SIGIOT 这指示一个实现定义的硬件故障。IOT这个名字来自于PDP-11对于输入/输出TRAP(input/outputTRAP)指令的缩写。系统V的早期版本,由abort函数产生此信号。SIGABRT现在被用于此。
SIGQUIT 当用户在终端上按退出键(一般采用Ctrl-/)时,产生此信号,并送至前台进程组中的所有进程。此信号不仅终止前台进程组(如SIGINT所做的那样),同时产生一个core文件。
SIGSEGV 指示进程进行了一次无效的存储访问。名字SEGV表示“段违例(segmentationviolation)”。
SIGSYS 指示一个无效的系统调用。由于某种未知原因,进程执行了一条系统调用指令,但其指示系统调用类型的参数却是无效的。
SIGTRAP 指示一个实现定义的硬件故障。此信号名来自于PDP-11的TRAP指令。SIGXCPUSVR4和4.3+BSD支持资源限制的概念。如果进程超过了其软C P U时间限制,则产生此信号。
SIGXFSZ 如果进程超过了其软文件长度限制,则SVR4和4.3+BSD产生此信号。

数据库

事务,database transaction:单个逻辑工作单元执行的一系列操作,要么完全执行,要么完全不执行
事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。

ACID属性:

  • atomic原子性:事务必须是原子工作单元,对于数据修改,要么全部执行,要么不执行
  • consistent一致性:事务完成时,必须使所有的数据保持一致状态,
  • insulation隔离性:并发事务所作的修改必须与任何其它并发事务所作的修改隔离,事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。
  • duration持久性:事务完成之后,它对于系统的影响是永久性的。

linux使用

查看某个运行的进程

参考
- ps -aux | grep program
- top

git使用

版本机常规操作,难一点的是分支的管理

linux命令返回值

在Linux中不管是启动桌面程序还是在控制台执行命令都会有一个返回值,可以叫做错误号(perror),在linux中执行命令后可通过命令:echo $?来查看上一条命令的返回值。要查看返回值的具体含义,可通过perror number查看

多线程多进程相关 弱项

多进程,多线程,单线程服务器的区别和应用场景

线程,进程的区别等

进程之间的任务队列

发布了45 篇原创文章 · 获赞 2 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章