开发工程师面试的秘密   

  因为打算转战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. CodeBlock 使用TextOut出错

    undefined reference to `TextOutA@20'C:\Program Files (x86)\CodeBlocks\MinGW\lib这次需要的库是:libgdi32.a 1. ...

  2. Jquery Mobile 学习笔记(一)

    1.模拟器,IOS:XCODE GENYMOTION  ANDROID:ECLIPSE GENYMOTION 2.jquery mobile data-role=page 代表一个页面 data-po ...

  3. HDU 1284 钱币兑换问题

    动态转移方程:dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3] 即要想兑够 i,有三种方法: 1.从 i - 1 再增加一个1分的: 2.从 i - 2 再增加一个2 ...

  4. Restore Oracle database to another server

    1. Copy or remotely mount the backupset folder from the source server to the target server 2. On the ...

  5. 【转】【WebDriver】不可编辑域和日历控件域的输入 javascript

    http://blog.csdn.net/fudax/article/details/8089404 今天用到日历控件,用第一个javascript执行后页面上的日期控件后,在html中可以看到生效日 ...

  6. JavaScript 基础第五天

    一.引言 前面我们讨论了函数的一些基本概念,因为函数在任何一门语言之中都是很重要所以还是要好好学.昨天打开博客的时候看到有人私信我的JavaScript写错了,我定睛一看果然写错了.对此我表示很抱歉, ...

  7. [转]Oracle VM VirtualBox虚拟机,Ubuntu虚拟机共享文件夹

    VirtualBox的菜单里选择"设备" -> "安装增强功能...". "设备" -> "共享文档夹",添 ...

  8. NTP服务配置

    一.NTP简介 在计算机的世界里,时间非常地重要,例如对于火箭发射这种科研活动,对时间的统一性和准确性要求就非常地高,是按照A这台计算机的时间,还是按照B这台计算机的时间?NTP就是用来解决这个问题的 ...

  9. smartroute简单集成集群聊天通讯

    在制定一个规模比较多大的聊天应用时,往往需要制定部署多个应用服务,其一可以保障服务的可靠性,其二可以增加用户负载量.但制定这样一种应用体系是一件复杂的事情,毕竟同一群体的用户实际上会在不同的服务器接入 ...

  10. 从KRE到XRE:ASP.NET 5中正在消失的那些K

    前几天写了篇博客ASP.NET 5中的那些K,刚把ASP.NET 5中的那些K搞明白了些,昨天发现微软正在让那些K消失. 首先是在 KRuntime 的git日志中发现的: * Runtime ren ...