开发工程师面试的秘密   

  因为打算转战linux平台,所以一直在配置自己喜欢的linux操作系统。同时在看那本《C 专家编程》,这本书主要是针对ANSI C 介绍的,所以和Linux(Unix )渊源比较深了,但是还是把自己看的睡着了。所以决定倒着看,首先是附录中的关于开发工程师面试的秘密,收获颇多,就整理一下自己学到的知识,同时也给自己充充电。

1.懂硬件的程序员是很危险的   

  为什么这么说呢,因为硬件是编程最终体现的平台,一个程序员如果还掌握硬件的知识,那么她就可以为所欲为了。将程序稍微烧在一个芯片上,就可以实现很多的功能,可以各种恶搞,还有追妹子。所以建议程序员学习一些硬件的知识,将自己的编程知识运用在硬件上面。

2.面试的侧重点(硅谷程序员面试)   

  “一个典型的面试会持续一整天,包括连续与六七个不同的工程师进行一个小时交流——在这个过程中,你必须让所有的人都信服你的确有能力加入到开发小组中来”。面试的问题不仅仅看中的他们对于问题做什么样的反应,更重要的是怎样做出的反应。面试的人是不是对于一个问题深思熟虑,还是将自己心中的答案脱口而出,面试这在说明自己的论据的时候是否具有足够的说服力。对于自己的答案的明显的策略固执己见还是思维灵活,完善自己的答案。   所以在面试的时候,要认真的思考,想一下面试在考察什么知识,凡事多思考一下,不要让面试管觉的你浮躁的样子或者是没有思考,而是在背答案之类的。

3.检测链表循环

  这一个问题是很经典的问题,如果是面试着直接的给出答案的话,就会让面试官感觉这个人是之前看到过这个题目,面试的效果就显示不出来。其实一般人最直接的想法就是遍历链表,并且做一个标记,如果在遍历过程中遇到自己做的标记的话,那么就是出现了循环。   进一步的思考的话,就是在不允许修改链表,这些数据是只读的,那么我们就不能够使用这一种方法了,而且要考虑一下时间和空间复杂度的问题。   最好的答案就是使用两个指针,从头开始,第一个指针每一次移动一个单位,第二个指针每一次移动两个单位,如果在遍历的过程中出现p1 == p2 ,也就是两个指针指向的是同一个对象的话,那么说明存在循环。

4.深层次的理解代码   

  这里想要说是关于运算符的操作,参考下面的几个语句:   x= x+1;  ++x; x++; x+=1;   最终的结果都是将x加1,但是在实际的编程中还是需要考虑一下上下文环境,会有不同的答案。   对于++操作,我们希望开发人员能够站在编译器的角度去思考:++x表示的是取x的地址,增加它的内容,然后把结果保存在寄存器中;x++表示的是取x的地址,把它的内容装入到寄存器,然后增加内存中的x的值。   

  arr[--j + i++]  += --y;   

  这一句代码翻译成为简单的C++代码:   

  --y;   

  --j;

  arr[j+i] = arr[j+i] + y;

  i++;

5.库函数的调用和系统调用的区别

  函数调用是调用函数库中的一个程序,并且相同的编译器版本,函数库是相同的,同时有些函数是自己实现的;库函数调用则是和用户程序相关的,是在用户的地址空间上执行;运行时间是用户时间,该过程属于过程调用,开销比较小.   系统调用与操作系统相关很大,不同的操作系统系统调用不同,它调用的是系统内核的服务;系统调用是操作系统的一个进入点,在内核的地址空间执行;运行状态是在内核态,属于系统的运行时间,同时需要切换到内核上下文环境,开销比较大;

6.文件描述符和文件指针

  文件描述符在形式上就是一个非负证书,实际上它是一个索引,指向内核为每一个进程所维护的该进程打开文件记录的表格。当程序中打开一现有的文件或者是创建一个新文件,内核都会向进程返回一个文件描述符。文件描述符的概念一般只是在linux unix操作系统中有。文件描述符的有效范围是0~OPEN_MAX,一般来说一个进程最多可以打开64个文件,一些操作系统则没有限制,取决于内存的大小,int的大小,以及系统管理的设定。文件描述符是有无符号的整形的表示的句柄,进程使用它来标识打开的文件,文件描述符与包括相关信息的文件对象相关联,这些信息被称为文件的上下文。对于每一个进程,操作系统内核在u_block结构中维护文件表述符表,所有的文件描述符都在该表中建立索引。   

  文件指针保存的是一个FILE 结构体的地址,FILE 是系统定义的一个结构,该结构含有文件名、文件状态、文件当前位置等等信息。

7.如何判断一个变量是有符号的还是没有符号

  有无符号和是不是负数是完全不同的概念。而且不同的编译平台也不相同。下面采取的方式是针对二进制底层的判断。   

    #define ISUNSIGNED(a)  (a>=0 && ~a >=0)   

  因为所有的无符号的数据都不可能是小于0 的,对该变量取反,原变量和取反之后的结果均是大于0 的,说明它是无符号的。   

  还可以采用一种方式就是   

    #define ISUNSIGNED(type)  ((type)0 - 1> 0)

8.从文件中随即提取一个字符   

  该问题的最常见的回答方式就是遍历文件,计算文件的大小,然后在该范围内随即产生一个数字,提取该字符即可;但是只允许顺序遍历文件一次的话,怎么做 ?   就是在遍历文件的时候就选择一个随即的字符,读入一个字符,怎么随机,也只是这一个字符,然后在读取一个字符,在这两个字符之间随机选取,一次执行下去。

附今日总结:   

  打造自己喜欢的Ubuntu 12.04 (Office &  输入法)   

  今天在新学生活动中心学习一些linux上面的知识,因为喜欢金山的WPS,而且金山也有专门的deb安装包,所以就在Ubuntu12.04上面安装了WPS,打开的时候,因为缺少字体,就找到一些字体安装包,果然是可以使用的。不过问题又出现了,就是输入大太不好使用了,因为输入狂总是在左下角落里,体现效果太差了,搜了一下解决办法,果然是比较好,竟然有linux版本的搜狗和谷歌输入法,就安装上了这个比较习惯的输入法,重启电脑之后就可以了。   

  还有就是今天感觉还不错,上午的时候,偶然发现了一个比较好的框架WordPress,之前听MH同学提起过,不以为意。今天看到一个网站也是用它做的,就向试一下,果然是很豪华的样子。入门应该比较简单,需要在自己的电脑上安装好PHP5.5 + MySQL + Apache环境,然后就是在取WordPress官方网站下载该框架,直接解压到服务器的根目录即可。打开网站的时候,会一步步的提示你,创建数据库表格,不过数据库是不可以创建的,所以我们需要之前在数据库中创建一个对应的数据库,或者是使用已经存在的数据库。   

 

  今天就先到这里了!

追寻梦的飞飞

2013.04.06 于广州

开发工程师面试的秘密( 整理自 Export C Programming )的更多相关文章

  1. Java高级开发工程师面试笔记

    最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...

  2. web开发前端面试知识点目录整理

    web开发前端面试知识点目录整理 基本功考察 关于Html 1. html语义化标签的理解; 结构化的理解; 能否写出简洁的html结构; SEO优化 2. h5中新增的属性; 如自定义属性data, ...

  3. 珍藏版 Python 开发工程师面试试题

    珍藏版 Python 开发工程师面试试题 说明:不拿到几家公司的offer,那就是卑鄙的浪费 一.Python_基础语法 1.可变与不可变类型: 2.浅拷贝与深拷贝的实现方式.区别:deepcopy如 ...

  4. JAVA开发工程师面试(1)

    我已经有很长一段时间没有更新博客了,难道是博主我变懒惰了吗?哎,这样可不行啊,我还有好多知识要学习,要和大家分享.以后我需要更加努力,改掉自己的惰性.本人文采不怎么样,只能是把自己所想的说出来,想和大 ...

  5. [转] Web前端开发工程师常用技术网站整理

    1.常用工具相关 有道云笔记 http://note.youdao.com/signIn/index.html 36镇-最好用的共享收藏夹 http://www.36zhen.com/ 浏览器同步测试 ...

  6. Web前端开发工程师常用技术网站整理

    1.常用工具相关 有道云笔记 http://note.youdao.com/signIn/index.html 36镇-最好用的共享收藏夹 http://www.36zhen.com/ 浏览器同步测试 ...

  7. 大数据开发工程师面试《一》Shopee虾皮技术面

    一.项目问题 1 做了哪些项目2 使用什么技术3 哪个是你主导的项目,一共开发多少个接口,项目多长时间,数据库有多少个表 二.技术问题 1 用自己擅长的语言实现非递归单链表反转 现场手写2 Hadoo ...

  8. Java开发工程师面试-基础

    JDK.JRE.JVM有什么区别? JDK:Java Development Kit 针对Java程序员的产品 JRE:Java Runtime Environment是运行Java的环境集合 JVM ...

  9. Java高级开发工程师面试考纲 转

    转 http://www.sanesee.com/article/java-engineer-interview-of-content-tree 1 Java基础 1.1 Collection和Map ...

随机推荐

  1. out与ref的区别

    out与ref的区别  前者传参时不必初始化,后者需要初始化 int a,b; public void fName(out int a,out int b); fName(out a , out b) ...

  2. rails4.2~devise邮箱测试

    1.由于网站无需验证,只需一封欢迎邮件,在config/intiailzers/devise.rb里面配置 config.allow_unconfirmed_access_for = nil #2.d ...

  3. (转)如何为你的Viewcontroller瘦身

    View controllers are often the biggest files in iOS projects, and they often contain way more code t ...

  4. Software Testing hw3

    (a):可绘制出如下图所示的流程图 (b):对于测试用例t1=(n=3)和t2=(n=5),MAXPRIMES = 4时,t1不能检查出错误,而t2则会发生数组越界错. (c):要使测试路径不通过wh ...

  5. 给VM中的RHEL6.5配置本地源

    二步:1.启动时自动挂载安装盘:2.增加一个".repo"(或者改掉原来的源的配置p.s.除非你以后都不想用网络源或者已经知道如何更改源的配置,否则别改) 首先,在/media中创 ...

  6. 自学日记--JavaScript 001

    1.1输出内容: document.write(); 1.2警告语句: alert(); 1.3确认语句: comfirm(str); 返回值:boolean  确认返回true  取消返回false ...

  7. 本地推送UILocalNotification

    //本地推送---无需网络,由本地发起 UILocalNotification *localNotification = [[UILocalNotification alloc]init]; //设置 ...

  8. hdu 4698 - Counting(思路)

    转:题意:给定一个二维平面,其中x取值为1-N,y取值为1-M,现给定K个点,问至少包括K个点中的一个的满足要求的<Xmin, Xmax, Ymin, Ymax>共有多少中取值情况.也就是 ...

  9. Getting Started with WebRTC [note]

    Getting Started with WebRTC 原文 RTCPeerConnection 1.caller和callee互相发现彼此 2.并且交换capabilities信息 3.初始化ses ...

  10. Golang通过Thrift框架完美实现跨语言调用

    每种语言都有自己最擅长的领域,Golang 最适合的领域就是服务器端程序. 做为服务器端程序,需要考虑性能同时也要考虑与各种语言之间方便的通讯.采用http协议简单,但性能不高.采用TCP通讯,则需要 ...