来广州的第一天面试总结2018.4.16

原创 2018年04月17日 20:49:01

第一家:HR:近期规划,薪资4500Qt做地面站和上位机

1socket编程建立连接是几次握手,断开时几次握手?

(这篇文章写的很详细https://blog.csdn.net/weibo1230123/article/details/79975574

 

2)函数值传递时:数组和指针传递有什么区别?

3)查看cpu进程或线程用到什么命令?

1TOP命令,找到占用CPU最高的进程

2通过TOP -H -p 进程ID,找到具体的线程占用情况,Shift+H可以开启关闭线程显示。

3通过命令pstack 进程ID显示线程堆栈

4)如何地址复用?

(这篇文章写的很详细https://blog.csdn.net/weibo1230123/article/details/79978745

 

第二家:HR:多线程编程(创建线程函数有那几个参数)socket编程,tcpip编程,面试题一份如下: 

(1)采用淘汰制的乒乓球比赛中,共有123名选手参加,需进行______场比赛决出冠军。

1024名运动员参加乒乓球男子单打比赛,采用单淘汰制(即输一场被淘汰),要决出一名冠军,共需要多少场比赛?

这是一个等比数列求和的题目.淘汰赛第一轮就淘汰掉512名队员.就是打了512.第二轮淘汰掉256名选手,又打了256场(场数要再加上前面512场)

(2)检查unix系统中corn进程是否在运行中,用命令____________(需要进程进行过滤)。

ps命令。一般用的时候加些参数,如 # ps -eaf

如果想要根据某些关键字符查找进程,可以再在后面grep一下,如查跟mail相关的进程,可以用:# ps -eaf | grep mail

(3)分装是一种什么技术?封装的目的是使对象的什么分离?

封装就是把细节都隐藏起来,只留下简单的接口供使用者调用。

把一堆东西打个包(类),里面包含了类的名称、属性(变量)、方法(函数)等。

在面向对象软件开发中,对象是软件系统中基本的运行时实体,对象封装了属性和行为。封装是一种信息隐藏技术,其目的是使对象的使用者和生产者分离,使对象的定义和实现分开

 

(4)类之间共享属性和操作的机制称为什么?继承

(5)一个对象通过发送什么来请求另一个对象为其服务?信息,消息是要求某个对象执行类中定义的某个操作的规格说明,是一个对象与另一个对象的通信单元。一个消息通常包括接受对象名、调用的操作名和适当的参数(如有必要)

(6)类是一组具有相同属性和相同操作的对象的集合,类中的每一个对象都是这个类的一个什么?实例

(7)执行C++程序时出现“溢出”错误属于什么错误?

应该是运行吧,溢出一般出现在数据转换那就是运行的时候,溢出的话是能编译的,还没到连接的地步。(数据类型转换错误。导致内存溢出)

(8) int a=5,b=10;

Int *p1=&a,*p2=&b;下面不正确的语句是?

A:*p2=b

B:p1=a()

C:p2=p1

D:C=*p1*(*p2)

因为:pa,pb都属于指针类型,可以指向地址,或者对自己解引用得到指向内存的内容。

(9)假设i=2执行下列语句后i的值为?

Switch(i)

{

Case 1: i++;

Case 2: i--;

Case 3: ++i;break;

Case4: --i;

Default:i++

}

i = 2 就直接执行 case 2 中的语句(执行完case2i=1),你的case 2 后没有break;会接下来执行case 3 中的语句(执行完case3i=2),推出程序。

 

(10)使用重载函数编程的目得?重载和覆盖(重用)的区别?

重载函数常用来实现功能类似而所处理的数据类型不同的问题。但是重载函数的返回值类型可以不同。所谓函数重载的实质就是用同样的名字再定义一个有着不同参数但有着同样用途的函数。(人格分裂、多重身份……)

注意:可以是参数个数上的不同,也可以是参数数据类型上的不同!重载不是一个真正的面向对象特征,它只是可以简化编程工作的一种方案。

我们只能通过不同参数进行重载,但不能通过不同的返回值(尽管后者也是一种区别);

对函数进行重载的目的是为了方便对不同数据类型进行同样的处理。

重载(overload):对于类的方法(包括从父类中继承的方法),方法名相同,参数列表不同的方法之间就构成了重载关系。这里有两个问题需要注意:

 

1)       什么叫参数列表?参数列表又叫参数签名,指三样东西:参数的类型,参数的个数,参数的顺序。这三者只要有一个不同就叫做参数列表不同。

 

(2)       重载关系只能发生在同一个类中吗?非也。这时候你要深刻理解继承,要知道一个子类所拥有的成员除了自己显式写出来的以外,还有父类遗传下来的。所以子类中的某个方法和父类中继承下来的方法也可以发生重载的关系。

覆盖 (override):也叫重写,就是在当父类中的某些方法不能满足要求时,子类中改写父类的方法。当父类中的方法被覆盖了后,除非用super关键字,否则就无法再调用父类中的方法了。

 

发生覆盖的条件:

 

1、“三同一不低” 子类和父类的方法名称,参数列表,返回类型必须完全相同,而且子类方法的访问修饰符的权限不能比父类低。

2、子类方法不能抛出比父类方法更多的异常。即子类方法所抛出的异常必须和父类方法所抛出的异常一致,或者是其子类,或者什么也不抛出; 

3、被覆盖的方法不能是final类型的。因为final修饰的方法是无法覆盖的。

4、被覆盖的方法不能为private。否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

5、被覆盖的方法不能为static。所以如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误。反之亦然。即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。

 

方法的覆盖和重载具有以下相同点:

都要求方法同名

都可以用于抽象方法和非抽象方法之间

方法的覆盖和重载具有以下不同点:

方法覆盖要求参数列表(参数签名)必须一致,而方法重载要求参数列表必须不一致。

方法覆盖要求返回类型必须一致,方法重载对此没有要求。

方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类中的所有方法(包括从父类中继承而来的方法)

方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制。父类的一个方法只能被子类覆盖一次,而一个方法可以在所有的类中可以被重载多次。

另外,对于属性(成员变量)而言,是不能重载的,只能覆盖。

 

10

int a[ ]={0,1,2,3,4,5,6,7,8,9}:意思是a数组为包含{0,1,2,3,4,5,6,7,8,9}的整数数组,

int a[ ]={0,1,2,3,4,5,6,7,8,9},*p=ap是等效于a的整数指针,你应该这样读int *p =a;*号跟着变量走)定义了一个指针等于a数组首地址。

a[p-a]什么意思??p[i]相当于什么??

a[p-a]是取a数组里的第p-a个元素的值。p应该是移动过了的指针地址,也就是p当前指向的值。

p[i]p指向的数组地址的第i个元素的值。相当于*(p+i)

 

(11)已知XYZ+YZZ=532,其中XYZ为数字,写程序求出XYZ

 

#include "stdafx.h"

#include<iostream>

using namespace std;

int main()

{

int x, y, z;

for (x = 1; x <= 9; x++)

{

for (y = 1; y <= 9; y++)//if (x == y)跳到此行

{

if (x == y) continue;

for (z = 0; z <= 9; z++) //if (x == z || y == z)跳到此行

{

if (x == z || y == z)continue;

else if ((x * 100 + y * 10 + z) + (y * 100 + z * 10 + z) == 532)

cout << "x=" << x << " y=" << y << " z=" << z << endl;

}

}

}

system("pause");

return 0;

}

 

 

 

3.分享吧公司(没有去)

职位单片机工程师,番禺区大龙街东兴路476号星海通文化创意园33D06

邓生,18902228732

 

4.高新兴科技集团2019届精英实习生

广东省广州市萝岗区科学城开创大道2819

部门:平安城市与智慧交通事业部:C++开发工程师

 

第三家:HR:设备驱动,视频小车中的视频传输用的什么格式,用到过哪些linux中的库函数。面试题一份如下:

 1简述linuxunixwindows三大系统的区别及其各自优缺点?

windows:windows用户比较多最初构建于DOS之上,为闭源系统)

优点:软件,游戏比较丰富,操作简单,图形界面集成于内核。

缺点:网络功能不强,安全性不强。强制升级的影响,开发无法自主,必须借助微软提供的开发包。

 

Linux:(Linux是一个UNIX系统变种,属于类unix系统,为开源系统。)

优点:内核稳定性超强,一次启动可稳定工作数月而无碍(windows根本做不到),

进程管理方式优越,网络功能超强,安全性超高,文件,用户,管理功能超强,图形界面与内核分开。

而且系统可裁剪,兼容性强,使得它不仅能在PC机上跑,还能在一些移动终端上运行,

比如,android系统就是建立在linux内核之上。

linux系统的桌面可以很炫,也可以不用图形化界面。

缺点:用于娱乐的软件不多

 

Unixlinux的父亲,用于大型服务器,网络性能最强。很少用于桌面。

 

2什么是操作系统?操作系统与计算机体系结构是什么关系?云操作系统指什么?

操作系统是管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。操作系统是计算机系统的关键组成部分,负责管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本任务。

 

云计算操作系统是以云计算、云存储技术作为支撑的操作系统,是云计算后台数据中心的整体管理运营系统(也有人认为云计算系统包括云终端操作系统,例如现在流行的各类手机操作系统,这与先行的单机操作系统区别不大,在此不做讨论),

云计算操作系统是指构架于服务器、存储、网络等基础硬件资源和单机操作系统、中间件、数据库等基础软件之上的、管理海量的基础硬件、软件资源的云平台综合管理系统。

云操作系统与普通电脑中运行的操作系统相比,就好像高效协作的团队与个人一样。个人在接受用户的任务后,只能一步一步地逐个完成任务涉及的众多事项。而高效协作的团队则是由管理员在接收到用户提出的任务后,将任务拆分为多个小任务,再把每个小任务分派给团队的不同成员;所有参与此任务的团队成员,在完成分派给自己的小任务后,将处理结果反馈给团队管理员,再由管理员进行汇聚整合后,交付给用户。

 

3画出典型的放大电路、开关电路、射随器电路?

 

4什么是算法?写出你做过的算法及对应的功能?

算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。

一个算法应该具有以下五个重要的特征:

1、有穷性: 一个算法必须保证执行有限步之后结束;

2、确切性: 算法的每一步骤必须有确切的定义;

3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;

4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;

5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。

 

5什么是驱动?写出你熟悉的驱动及使用时应注意事项?

驱动程序扮演沟通的角色,把硬件的功能告诉电脑系统,并且也将系统的指令传达给硬件,让它开始工作。(硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作。)

 

6 C语言中头文件的主要作用是?

.h文件是头文件,内含函数声明、宏定义、结构体定义等内容

.c文件是程序文件,内含函数实现,变量定义等内容。

头文件是用户应用程序和函数库之间的桥梁和纽带。

 

7写出你熟悉的linux版本,该版本有何优缺点?

作者:JYounger

链接:https://www.zhihu.com/question/49555445/answer/123717110

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

Red Hat Enterprise  Linux(RHEL)Red Hat Enterprise LinuxRHEL)是无疑的Linux企业级应用的市场主导者,Red Hat Enterprise Linux (RHEL)也是中国许多企业架构其应用和服务的首选 Linux 发行版本,多年来甚至是Linux的代名词。

l  优点:技术支持较可靠、更新及时的;用户群庞大、衍生版本众多;服务器软件/硬件生态系统良好,技术支持社区规模大而有活力。

l  缺点:技术支持和更新服务是需要付费的;采用久为诟病的RMP软件包管理方式。

 

 

Ubuntu Enterprise LinuxUbuntu是一个流行的Linux发行版,是基于Debianunstable版本加强而来,以“最好的Linux桌面系统”而闻名,近些年Ubuntu也推出了Ubuntu Enterprise Linux, 在企业Linux应用市场占有率也有较大提高。

l  优点:技术支持较,用户界面友好,硬件的兼容性好,采用基于DebATP包管理系统。l  缺点:技术支持和更新服务是需要付费的, 服务器软件生态系统的规模和活力方面稍弱。

 

Community ENTerprise  Operating System(CentOS)CentOS是来自于Red Hat Enterprise Linux依照开GPL规定所发布源代码重新编译而成。这个发行版的目标是100%兼容RHEL。这意味你可以共享RHEL的服务器软件/硬件生态系统,同时也意味着你和RHEL用户享受了相同的安全级别。因此可以用CentOS替代RHELCentOS是使用最广泛的RHEL 兼容版本。

l  优点:与包括更新在内的服务完全免费,具备良好的社区技术支持,如果需要更专业级别的支持,那么还可以平滑的从CentOS转至RHEL,采用基于yumRMP包管理系统。

l  缺点:不提供专门技术支持,不包含封闭源代码软件;更新服务较为滞后,当然开发团队的可靠性也无法与上面3类商业版本Linux相比。

 

Debian GNU / LinuxDebian GNU / Linux是一款是由GPL和其他自由软件许可协议授权的自由软件组成的Linux操作系统,由Debian Project组织维护。以其坚守Unix和自由软件的精神,以及其给予用户的众多选择而闻名。

l  优点:Debian是极为精简而稳定的Linux发行版,有着干净的作业环境,采用基于DebATP包管理系统。

l  缺点:不提供专门技术支持,不包含封闭源代码软件;发行周期过长,稳定版本中软件过时。中文支持不是很完善。

 

8写出全局变量与局部变量的关系及使用时需要注意的事项?

9写出你所掌握的编辑器、编译器、调试器的各名称以及他们的优缺点?

 

编辑器:

vi

vim

nano

sed

pico

emacs

jed

joe

ed

Ex

编译器:GCCG++

调试器:gdb

10怎么理解linux的多任务,多进程以及在实际应用中注意哪些?

多任务并不是一起执行,只是因为所有程序都在获取执行权,CPU处理速度很快,看上去是在进行多任务。Linux 系统同时可以支持多个用户,每个用户对自己的文件设备有特殊的权利,能够保证用户之间互不干扰。就像手机开了助手一样,同时登陆多个 qq 账号,当硬件配置非常高时,每个用户还可以同时执行多个任务,多个线程同时工作,提高效率。多用户是 Linux 优于其他操作系统的一大特点。

 

11模块化编程思想是?应注意哪些事项?

1)模块化编程及把算法独立写成方法,提高了代码的重复使用率

2)模块化编程原则:

       高内聚: 一个c 文件里面的函数,只有相互之间的调用,而没有调用其他文件里面的函数,这样可以视为高内聚 。 尽量减少不同文件里函数的交叉引用。

       低耦合: 一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能 模块与模块之间的接口, 尽量的少而简单。

3) 实现模块化编程的三个主要手段是函数、宏定义与头文件。下面讲解一下头文件操作的详细步骤。

       第一步  创建头文件建立一个.c 文件(源文件)和一个.h 文件(头文件)。原则上文件名可以任意命名, 但强烈推荐如下原则:.c 文件与.h 文件同名;文件名要有意义,最好能够体现该文件代码的功能。 例如延时函数相关的源文件与头文件命名为delay.cdelay.h

        第二步 防重复包含处理

        .h 文件中加入如下代码 :

         #ifndef XXX

         #define XXX

          ... // 此处添加代码

         #endif

        其中的XXX 原则上可以是任意字符, 但同一个工程中各个.h 文件的XXX 不能相同,因此强烈推荐如

下的规则 .h 文件的文件名全部大写,“.” 替换成下划线“_”, 首尾各添加2 个下划线“__”作为XXX

       例如对于delay.h 文件 , 其内容如下 :

       #ifndef __DELAY_H__

       #define __DELAY_H__

        ... // 此处添加代码

        #endif

        第三步  代码封装

        将需要模块化的代码封装成函数与宏定义 函数体放在.c 文件中,需要被外部调用的函数还要在.h 文件中声明一下; 需要被外部调用的宏定义放在.h 文件中, 仅会被本.c 文件调用的宏定义放在.c 文件中 。

        第四步  尽量少用或不用全局变量

       必须要用的全局变量的声明要放在.c 文件中, 需要被外部调用的全局变量还要在.h 文件中重新用extern修饰声明一下, 用来告诉编译器有这个变量的存在(因为编译器的编译过程是按文件来的,链接过程才是各个文件的合并,如果没有这一步extern修饰声明就在另一个文件调用了这个变量,编译器会提示没有此变量)。

        第五步  添加源文件

        .c 文件添加到工程之中, 同时在需要调用.h 文件中的宏或者函数 (这里的函数是对应的.c 文件中函数的声明)的其他.c 文件中添加代码将该.h 文件包含进去(例如#include"delay.h")。

       第六步  使用

       头文件中的函数 、宏定义 、全局变量可以在包含了对应.h 文件的.c文件中自由调用使用了。

 

 

12正确的科研思维?正确的解析习惯?

 

13写一个避免僵死进程的小程序?避免僵死进程的方法?

一、什么是僵死进程?

一般情况下,程序调用exit(包括_exit_Exit,它们的区别这里不做解释),它的绝大多数内存和相关的资源已经被内核释放掉,但是在进程表中这个进程项(entry)还保留着(进程ID,退出状态,占用的资源等等),你可能会问,为什么这么麻烦,直接释放完资源不就行了吗?这是因为有时它的父进程想了解它的退出状态。在子进程退出但还未被其父进程“收尸”之前,该子进程就是僵死进程,或者僵尸进程。如果父进程先于子进程去世,那么子进程将被init进程收养,这个时候init就是这个子进程的父进程。

所以一旦出现父进程长期运行,而又没有显示调用wait或者waitpid,同时也没有处理SIGCHLD信号,这个时候init进程就没有办法来替子进程收尸,这个时候,子进程就真的成了“僵尸”了。

二、僵死进程与孤儿进程的区别?

回答这个问题很简单,就是爸爸(父进程)和儿子(子进程)谁先死的问题!

如果当儿子还在世的时候,爸爸去世了,那么儿子就成孤儿了,这个时候儿子就会被init收养,换句话说,init进程充当了儿子的爸爸,所以等到儿子去世的时候,就由init进程来为其收尸。

如果当爸爸还活着的时候,儿子死了,这个时候如果爸爸不给儿子收尸,那么儿子就会变成僵尸进程。

三、僵死进程的危害?

四、避免僵死进程的方法

网上搜了下,总结有三种方方法:

① 程序中显示的调用signal(SIGCHLD, SIG_IGN)来忽略SIGCHLD信号,这样子进程结束后,由内核来wai和释放资源

fork两次,第一次fork的子进程在fork完成后直接退出,这样第二次fork得到的子进程就没有爸爸了,它会自动被老祖宗init收养,init会负责释放它的资源,这样就不会有“僵尸”产生了

③ 对子进程进行wait,释放它们的资源,但是父进程一般没工夫在那里守着,等着子进程的退出,所以,一般使用信号的方式来处理,在收到SIGCHLD信号的时候,在信号处理函数中调用wait操作来释放他们的资源。

 

避免产生僵尸进程的5种方法

1、推荐方法:fock twice, 用孙子进程去完成子进程的任务(注意这种方法的使用情景)(http://blog.csdn.net/duyiwuer2009/article/details/7948040

2wait(), 但是会使父进程阻塞

3signal(SIGCHLD,SIG_IGN), 并不是所有系统都兼容

4sigaction + SA_NOCLDWAIT, 并不是所有系统都兼容

5、推荐方法:在signal handler中调用 waitpid (下面的例子能说明用 waitpid 而不用 wait的原因),这样父进程不用阻塞

注意:每一种方法都有它适用的场合,比如方法 5 适用于 one-request-one-process 的网络服务器程序,而方法 1 则不适合。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weibo1230123/article/details/79980525

第一天面试的总结

今天是来长沙的第一天,本来以为面试很简单、很容易。但真正面对的时候才发现,其实真的没有想象中的那么简单。光找位置就发费了很长的时间,在这个人生地不熟的地方,找位置成了我们最大的困难。还有就是个人简历,...
  • qq_38108146
  • qq_38108146
  • 2018-01-25 20:05:28
  • 46

【面经】广州蓝月亮一面经验总结

我是面页面设计实习生,昨天一大早就出发去市长大厦,因为一直听说面试最忌讳迟到,所以早上7点半就出发了,HR说9点要到。我8点40分就到了,是第一个到的。当天早上有6个人,其中一个是研二的。研究生和一个...
  • u010250617
  • u010250617
  • 2013-12-06 21:03:29
  • 3204

实习笔记:实作第一天工作总结

我就是个新手,大家互帮互助的学习吧!
  • java_wht
  • java_wht
  • 2017-05-15 18:45:23
  • 955

广州电网面试-计算机类

写在前面的废话:       到现在都没有广州电网面试的我,想为以后的offer求RP.   话说,广州电网的简历筛的那个猛烈啊。不知道是不是我们班专业的原因,50多个人,班上收到笔试通知的人,寥寥...
  • sulingzenglinhua
  • sulingzenglinhua
  • 2012-12-09 14:23:45
  • 1210

2012工行软开中心-广州面试

10月国庆之后,我参加了工行软开的面试。这是属于银行的提前面试,只有在宣讲会投递了简历的才能参加这次的面试。面试分为2个部分:单面和群面。      记得我是下午面试,到了那的时候,先给我们每个人发...
  • sulingzenglinhua
  • sulingzenglinhua
  • 2012-12-09 16:39:13
  • 4894

面试新的体会(第一天)

今天是我来到上海的第二天的面试,说实话我很感谢昨天的面试,虽然是昨天的面试也没有拿到什么Offer。但是我从昨天的面试学到了一些东西,1、第一首先就是在面试的过程中,首先就是要把自己知道的一些东西清楚...
  • lilong329329
  • lilong329329
  • 2017-11-30 22:22:13
  • 35

实训第一天总结

java基础
  • huang5463341
  • huang5463341
  • 2017-09-08 12:07:28
  • 67

2015网易iOS岗实习面试小记(广州)

面试已经过去有一段时间了,之前一直忙于其他零零碎碎的事情,没有把网易的面试记录下来,今天就靠着记忆,写写网易的面试经历。 先从投简历+在线笔试说起,在网易实习招聘的官网按提示填好信息、投递简历即可...
  • u013420867
  • u013420867
  • 2015-05-06 20:59:20
  • 1165

实训第一天-总结与期望

在过去的两年里,学习上还算认真,有努力过,也有偷懒的时候,但不太爱做笔记。对于感兴趣的内容比较认真,比如web前端有关的一些知识,以及ps。不过很少在课后实践前端页面效果,在空闲的时间里,喜欢逛逛网站...
  • qq_39048609
  • qq_39048609
  • 2017-06-07 10:18:41
  • 206
收藏助手
不良信息举报
您举报文章:来广州的第一天面试总结2018.4.16
举报原因:
原因补充:

(最多只允许输入30个字)