程序员面试攻略(读书笔记)
来源:互联网 发布:防网络诈骗手抄报内容 编辑:程序博客网 时间:2024/04/28 02:28
程序员面试攻略programming interview exposed
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int str[PHONE_NUMBER_LENGTH];
str[0] = 4;
str[1] = 9;
str[2] = 7;
str[3] = 1;
str[4] = 9;
str[5] = 2;
str[6] = 7;
//int count = printTelephoneWords1(str);
//printf("count is %d/n", count);
John mongan编
杨晓云等译
机械工业出版社
1. 求职过程
2. 程序设计面试题的解答思路
对面试题不清楚的地方一定要问清楚,在编写代码的过程中应随时向考官解释你正在做的事情,写完程序后应该找例子验证自己写出来的代码,对解决方案的复杂性进行分析
3. 链表
P21头指针的修改,用c语言
//无法正确改变父函数里的指针
Int badinsert(element *head){
element *newelem;
……
head=newelem;
……
}
//正确的代码
Int insert(element **head){
element *newelem;
……
*head=newelem;
……
}
P49编写函数判定链表是否是循环链表
用快慢不同的指针对链表进行遍历,如果快指针到达链表尾则是非循环的,如果快指针超过慢指针,则是循环链表。
使用快慢指针判断的好处是:可以防止尾指针不是直接连到头指针,而是它之后的指针,那么这种情况下传统的以头指针作为基准判断是否有循环的方法就可能陷入死循环。
4. 树和图
5. 数组与字符串
6. 递归算法
面试例题 电话键单词
请编写一个函数,它以一个7位数的电话号码为输入,
把各种可能的“单词”--也就是能够用来代表给定
号码的字母组合--都打出来。因为电话上的“0”
“1”按键上没有字母,所以你只需要把数字2-9转换
成字母。
*********************************************/
请编写一个函数,它以一个7位数的电话号码为输入,
把各种可能的“单词”--也就是能够用来代表给定
号码的字母组合--都打出来。因为电话上的“0”
“1”按键上没有字母,所以你只需要把数字2-9转换
成字母。
*********************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#definePHONE_NUMBER_LENGTH 7
int COUNT = 0;
/*********************************************
//它以一个电话键数字(0-9)和一个位置序号(1 2 3)为输入参数,返回该数字按键
//上指定序号相对应的字母。比如说,getCharKey(3, 2)将返回字母"E"--电话按键
//"3"上的字母是"DEF",而"E"正好是这几个字母当中的第二个
*********************************************/
char getCharKey(int telephoneKey, int place) {
switch(telephoneKey) {
case 0:
return '0';
case 1:
return '1';
case 2:
if (place == 1)
return 'a';
else if (place == 2)
return 'b';
else
return 'c';
case 3:
if (place == 1)
return 'd';
else if (place == 2)
return 'e';
else
return 'f';
case 4:
if (place == 1)
return 'g';
else if (place == 2)
return 'h';
else
return 'i';
case 5:
if (place == 1)
return 'j';
else if (place == 2)
return 'k';
else
return 'l';
case 6:
if (place == 1)
return 'm';
else if (place == 2)
return 'n';
else
return 'o';
case 7:
if (place == 1)
return 'p';
else if (place == 2)
return 'r';
else
return 's';
case 8:
if (place == 1)
return 't';
else if (place == 2)
return 'u';
else
return 'v';
case 9:
if (place == 1)
return 'w';
else if (place == 2)
return 'x';
else
return 'y';
default:
return '#';
}
}
/*********************************************
//它以一个电话键数字(0-9)和一个位置序号(1 2 3)为输入参数,返回该数字按键
//上指定序号相对应的字母。比如说,getCharKey(3, 2)将返回字母"E"--电话按键
//"3"上的字母是"DEF",而"E"正好是这几个字母当中的第二个
*********************************************/
char getCharKey(int telephoneKey, int place) {
switch(telephoneKey) {
case 0:
return '0';
case 1:
return '1';
case 2:
if (place == 1)
return 'a';
else if (place == 2)
return 'b';
else
return 'c';
case 3:
if (place == 1)
return 'd';
else if (place == 2)
return 'e';
else
return 'f';
case 4:
if (place == 1)
return 'g';
else if (place == 2)
return 'h';
else
return 'i';
case 5:
if (place == 1)
return 'j';
else if (place == 2)
return 'k';
else
return 'l';
case 6:
if (place == 1)
return 'm';
else if (place == 2)
return 'n';
else
return 'o';
case 7:
if (place == 1)
return 'p';
else if (place == 2)
return 'r';
else
return 's';
case 8:
if (place == 1)
return 't';
else if (place == 2)
return 'u';
else
return 'v';
case 9:
if (place == 1)
return 'w';
else if (place == 2)
return 'x';
else
return 'y';
default:
return '#';
}
}
/*****************************************
非递归算法
*****************************************/
非递归算法
*****************************************/
int printTelephoneWords1(int phoneNum[]) {
char results[PHONE_NUMBER_LENGTH + 1];
int x[PHONE_NUMBER_LENGTH];
int i;
int level = 0;
int count = 0;
char results[PHONE_NUMBER_LENGTH + 1];
int x[PHONE_NUMBER_LENGTH];
int i;
int level = 0;
int count = 0;
results[PHONE_NUMBER_LENGTH] = '/0';
for (i = 0; i <PHONE_NUMBER_LENGTH; i++)
x[i] = 0;
while (level > -1) {
x[level] += 1;
if (x[level] < 4) {
results[level] = getCharKey(phoneNum[level], x[level]);
if (results[level] == '0' || results[level] == '1') {
x[level] = 3;
}
if (level == PHONE_NUMBER_LENGTH - 1) {
printf("%s/n", results);
count++;
}
else {
level++;
x[level] = 0;
}
} else {
level--;
}
}
return count;
}
x[i] = 0;
while (level > -1) {
x[level] += 1;
if (x[level] < 4) {
results[level] = getCharKey(phoneNum[level], x[level]);
if (results[level] == '0' || results[level] == '1') {
x[level] = 3;
}
if (level == PHONE_NUMBER_LENGTH - 1) {
printf("%s/n", results);
count++;
}
else {
level++;
x[level] = 0;
}
} else {
level--;
}
}
return count;
}
int main() {
int str[PHONE_NUMBER_LENGTH];
str[0] = 4;
str[1] = 9;
str[2] = 7;
str[3] = 1;
str[4] = 9;
str[5] = 2;
str[6] = 7;
//int count = printTelephoneWords1(str);
//printf("count is %d/n", count);
printTelephoneWords(str);
printf("count is %d/n", COUNT);
return 0;
}
printf("count is %d/n", COUNT);
return 0;
}
7. 其他程序设计问题
面试例题:字节的升序存储和降序存储方式
字节的升序存储方案中最低位字节保存在最低位的地址里
字节的降序存储方案中最高位字节保存在最低位的地址里
以下函数升序返回1,降序返回0
Int endianness(void){
Int testnum=1;
Char *ptr;
Ptr=(char *)&testnum;
Return(*ptr);
}
Int endianness(void){
Union{
Int theinteger;
Char singlebyte;
}endiantest;
Endiantest.theinteger=1;
Return endiantest. singlebyte;
}
例题:请编写一个函数,把一个给定的整数的二进制表示形式的“1”的个数统计出来。
int NumOnesInBinary(int number)
{
int numOnes = 0;
while (number)
{
number = number & (number - 1);
numOnes++;
}
return numOnes;
}
int NumOnesInBinary(int number)
{
int numOnes = 0;
while (number)
{
number = number & (number - 1);
numOnes++;
}
return numOnes;
}
8. 与技术、测量、排序有关的智力题
9. 与图形和空间有关的智力题
一只狐狸在追一只鸭子,鸭子逃到了一个正圆形池塘的圆心位置.狐狸不会游泳,鸭子也不能在水面上起飞(这是一只有残疾的鸭子).狐狸的速度是鸭子的4倍.假设鸭子和狐狸分别遵循着最优的逃跑和追逐策略,请问:鸭子能不能安全地游到池塘边并起飞?如何能,怎么样才能做到?
设大圆半径为R
二小圆的半径分别为(4-∏)R/4 和R/4,化简后约为0.21~0.25R
逃生方法:鸭妹在红色区间作圆周运动,狐兄亦在岸上作圆周运动(假设起跑时鸭与狐在同一直径上且距离最近),当鸭看到自已经过圆心与岸上的狐成一直线时,立即改变方向沿着半径的方向向岸上游去。
二小圆的半径分别为(4-∏)R/4 和R/4,化简后约为0.21~0.25R
逃生方法:鸭妹在红色区间作圆周运动,狐兄亦在岸上作圆周运动(假设起跑时鸭与狐在同一直径上且距离最近),当鸭看到自已经过圆心与岸上的狐成一直线时,立即改变方向沿着半径的方向向岸上游去。
10. 计算机基础知识
11. 非技术问题
附录.写个人简历的方法
- 程序员面试攻略(读书笔记)
- 程序员面试攻略读书笔记
- 程序员面试宝典(读书笔记)
- ★ 程序员面试攻略
- 程序员求职攻略(《程序员面试笔试宝典》)
- 读书笔记(程序员面试宝典第三版)
- 《程序员面试宝典》读书笔记
- 程序员面试攻略试题1
- 程序员面试攻略题2
- 程序员面试攻略题3
- 设计模式大集锦 (程序员面试全攻略)
- 程序员求职之道(《程序员面试笔试宝典》)之企业面试笔试攻略(互联网)?
- 程序员求职之道(《程序员面试笔试宝典》)之企业面试笔试攻略(互联网)?
- 程序员求职之道(《程序员面试笔试宝典》)之企业面试笔试攻略(互联网)?
- 程序员求职攻略(《程序员面试笔试宝典》)之面试笔试技巧?
- 《程序员面试宝典》简略读书笔记
- 《.NET程序员面试秘籍》读书笔记
- [Java程序员面试宝典]读书笔记
- 面向对象的 Javascript 函数重载和类型检查
- 微软高级流格式ASF简介
- 面向对象的 Javascript 作用域
- 面向对象的 Javascript 闭包
- 面向对象的 Javascript 上下文
- 程序员面试攻略(读书笔记)
- 面向对象的 Javascript 面向对象基础
- 程序员面试宝典(读书笔记)
- 取得数据库某表的所有行数
- a joke
- DataGrid快速分页~~!
- 一道数学题
- Highrise对Rails的意义
- DotNetBar 6.6.0.5 for VS2003