乐视TV搜索工程师电话面试

1.linux查看机器的资源命令

uname -a # 查看内核/操作系统/CPU信息 head -n 1 /etc/issue # 查看操作系统版本 cat /proc/cpuinfo # 查看CPU信息 hostname # 查看计算机名 lspci -tv # 列出所有PCI设备 lsusb -tv # 列出所有USB设备 lsmod # 列出加载的内核模块 env # 查看环境变量 资源 free -m # 查看内存使用量和交换区使用量 df -h # 查看各分区使用情况 du -sh # 查看指定目录的大小 grep MemTotal /proc/meminfo # 查看内存总量 grep MemFree /proc/meminfo # 查看空闲内存量 uptime # 查看系统运行时间、用户数、负载 cat /proc/loadavg # 查看系统负载 磁盘和分区 mount | column -t # 查看挂接的分区状态 fdisk -l # 查看所有分区 swapon -s # 查看所有交换分区 hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备) dmesg | grep IDE # 查看启动时IDE设备检测状况 网络 ifconfig # 查看所有网络接口的属性 iptables -L # 查看防火墙设置 route -n # 查看路由表 netstat -lntp # 查看所有监听端口 netstat -antp # 查看所有已经建立的连接 netstat -s # 查看网络统计信息 进程 ps -ef # 查看所有进程 top # 实时显示进程状态 用户 w # 查看活动用户 id # 查看指定用户信息 last # 查看用户登录日志 cut -d: -f1 /etc/passwd # 查看系统所有用户

cut -d: -f1 /etc/group # 查看系统所有组 crontab -l # 查看当前用户的计划任务 服务 chkconfig –list # 列出所有系统服务 chkconfig –list | grep on # 列出所有启动的系统服务 程序 rpm -qa # 查看所有安装的软件包

2.一个链表a[1],a[2],…a[n-1]->a[n]变为a[n/2],a[n/2+1],…a[n],a[1],a[2]…a[n-1]

只能移动n步,不能移动到3/2n步 当时没有想出来,关键是只能扫描一次! 那么问题变成,扫描一次就要找出一半的位置。 用一个快指针p1,和一个慢指针p2,快指针p1走两步,慢指针p2走一步,那么快指针p1位空的时候慢指针恰好为一半,然后链过去就行了!

3.static变量、static函数

哎,这个关键字用得不多,真的是悲剧! 以前写代码都注重过程的实现了,这方面好空白,是个教训! c空白都太多! static变量: static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0。 via: static函数: 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。还是用来隐藏!

4.如何实现一个队列(数组)

M:基本的操作:q.push,q.pop,q.top Ta:如何实现呢? M:(描述了一下普通的队列) Ta:那这样子下标会不断的向前移动啊 M:那用循环队列吧 Ta:那循环队列满了怎么办? M:可以复制到另外一个数组,比如a[10],如果来第11个元素,,那么开一个20大小的数组,依次下去,指数增长 Ta:那要是增长到一定程度,而队列中元素很少怎么办? M:再复制回来,不过这种指数收缩还有增长会耗费很多的时间。 Ta:有没有更好的方法? M:(跪了)

面试完想了一下,下面的方法可能可以

左边是链表,右边是数组,数组开很小,这样子的话释放不必要的内存就很容易的。 不知道面试官要的是不是这个答案。 欢迎交流!

5.并查集

这个答得不好就纯属自己作的,这久忙开题答辩,好久没有看数据结构了,这么基本的都答不好,跪了也在情理之中!面试官告诉我,一个数据结构,要从两个方面把握,是什么,还有有什么操作 1.是什么?集合的简单表示 2.有什么操作?

Union 支持两个 不相交集合的合并,否则不执行合并find 查找元素所在的子集合initial 初始化为只有一个元素的子集和 为了得到得到两个子集的并,只要将一个子集和根节点的双亲指针指向另一个集合的根节点。

Ta:两个有相交元素的集合实现合并怎么办? M:(什么查找啊,反正一顿晕)

6.中缀表达式的计算

之前在博客上看到一个代码,摘下来了,结果就问了

[MAX];int tail;int main(){ int a; while(scanf(“%d “,&a)&&a!=0){ tail=0; ch1,ch2; while(scanf(“%c %d%c”,&ch1,&a,&ch2)!=EOF){if(ch1==’+’){stack[++tail]=1.0*a;//push}else if(ch1==’-‘){stack[++tail]=-1.0*a;//push neg}else if(ch1==’*’){stack[tail]=stack[tail]*a;//update tail}else if(ch1==’/’){stack[tail]=stack[tail]/(double)a;//updata tail}if(ch2!=’ ‘)break; }//2.把栈里头的东西全部加起来,求和 double result=0; for(int i=1;i<=tail;i++)result+=stack[i]; printf(“%.2lf\n”,result); }return 1;}

Ta:可以进行什么操作,不能进行什么操作 M:可以优先计算乘除 Ta: -1 5 和 5 -1可以计算吗? M:前者可以,后者不行 Ta:在原有代码的基础上,我们进行优化,支持小括号,说一下思路,提示了用递归

同样没答出来,可能比较紧张吧,考研失败才找工作,第二家面试的公司,而且第一家很水,没那多算法,下来想了一下面试官说的递归是什么意思,如下: 括号里面的式子就是一个数,遇到左括号那么就进入递归,然后遇到右括号的时候计算出的数字在栈顶,那么括号里面就是一个普通的数字了!

写一些话给后来人,以及祭奠我捉急的智商…

经验是由痛苦中粹取出来的

乐视TV搜索工程师电话面试

相关文章:

你感兴趣的文章:

标签云: