面试题
文章平均质量分 67
龙少爷_阿呆
燕山大学硕士 研究XML关键字查询 关注数据结构和算法 java C/C Linux
展开
-
常见的笔试面试题(概念性的:死锁,进程通信方式,指向字符变量的指针,文件索引结构,可被重载的运算符)
死锁的四个条件进程通信的方式原创 2013-09-10 10:13:53 · 3275 阅读 · 1 评论 -
MVC框架
MVC框架原创 2013-09-09 18:52:36 · 2643 阅读 · 1 评论 -
ISO/OSI网络体系结构和TCP/IP协议模型
TCP/IP协议原创 2013-09-09 17:01:42 · 50810 阅读 · 7 评论 -
面试题45:字符串四则运算的实现
题目:有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。说明:1. 四则运算即加减乘除"+-*/" 2. 该表达式中的数字只能是1位(数值范围0~9) 3.另若有不能整除的情况,按向下取整处理,eg: 8/3得出值为2。例如:若有字符串"8+7*2-9/3",计算出其值为19。主要考点:1. 数字的字符形式变换为数字形式的方法; 2.原创 2013-09-06 15:48:29 · 3097 阅读 · 3 评论 -
编程技术面试的五大要点
扎实的基础知识、高质量的代码、清晰的思路、优化代码的能力、优秀的综合能力是编程技术面试的五大要点。找工作一直是一个热门话题。要想找到心仪的工作,难免需要经过多轮面试。编程面试是程序员面试过程中最为重要的一个环节。如果能在编程面试的环节充分展示自己的能力,那么拿到中意的Offer就是水到渠成的事情。我先后在欧特克、微软和思科等公司任软件工程师,多次接受他人的面试,同时也面试过很多人。转载 2013-09-01 20:19:51 · 959 阅读 · 0 评论 -
面向对象的三大特点
封装:包含两方面,一是将有关的数据和操作代码封装在一个对象中,形成基本单位,各个对象之间相互独立,互不干涉。二是将对象中某些部分对外隐藏,及隐藏其内部细节,只留下少量接口,以便于外界联系,接受外界的消息。这种对外界隐藏的做法称为信息隐藏。抽象的作用是表示同一类事物的本质。继承:软件开发中已经建立了一个类A,又想另外建立一个类B,而后者与前者内容基本相同,只是在前者的基础上增加一些属性和行为原创 2013-09-01 19:34:01 · 1036 阅读 · 0 评论 -
面试题33:把字符串转换为整数
C语言的库函数atoi()的作用是将一个字符串转换为整数。写一个函数StrToInt,实现这一功能。原创 2013-09-01 20:29:20 · 6437 阅读 · 3 评论 -
面试题30:两个链表的第一个公共结点
分析:从链表结点的定义看,两个链表是单向链表。如果两个单向链表有公共结点,那么这两个链表从某一结点开始,他们的m_pNext都指向同一个结点。从第一个公共结点开始,之后它们所有结点都是重合的,不可能再出现分叉。例如:方法一:分别把两个链表的结点放入两个栈中,这样两个链表的尾结点就位于两个栈的栈顶,然后比较两个栈顶的结点是否相同。若相同,则把栈顶弹出接着比较下一个栈顶,直到找到最后一个相原创 2013-07-26 17:37:02 · 804 阅读 · 0 评论 -
面试题29:数组中的逆序对
暴力方法:扫描数组中的每个数,逐个比较该数字和其后面的数字的大小,若后面的数字比其小,则是一个逆序对。改进方法:先把数组分割成子数组,先统计出子数组内部的逆序对数,然后再统计出两个相邻子数组见的逆序对数。统计逆序对的过程中,需要对数组进行排序。显然排序过程是归并排序。时间复杂度由O(n^2)降为O(nlogn),但需要O(n)的空间复杂度,是用空间换时间的做法。代码:#incl原创 2013-07-26 17:19:04 · 890 阅读 · 0 评论 -
面试题32:数字在排序数组中出现的次数
思路:利用二分查找分别求出该数字在数组中第一次和最后一次出现的位置下标代码:#include "stdafx.h"#include #include using namespace std;//找到数组中第一次出现key的元素的下标int BinarySearchFirstKey(int nArr[], int nLength, int key){ assert(nArr原创 2013-07-26 20:31:03 · 772 阅读 · 0 评论 -
面试题31:数组中的最小绝对值
数组中的原创 2013-07-26 17:54:33 · 882 阅读 · 0 评论 -
面试题35:寻找一个字符串中最长的重复子串
思路:1. 用字符串指针数组保存用户输入的字符串的所有后缀字符串;2. 将后缀字符串集合进行排序;3. 比较相邻字符串的公共子串长度,找到长度最大值,保存相应字符串即为所求代码如下:#include "stdafx.h"#include #include #include #define MAXCHAR 5000 //最长处理5000个字符char原创 2013-09-04 20:32:00 · 7000 阅读 · 3 评论 -
面试题36:不使用额外空间将A、B两链表元素交叉归并
#include "stdafx.h"#include using namespace std;//定义结点类型struct Node { int m_value;//结点值 Node* m_next;//指向下一个结点的指针};//创建一个长度为n的链表,返回头结点的指针Node* creat(int n){ Node* head; N原创 2013-09-04 20:49:17 · 4008 阅读 · 0 评论 -
判断一个单向链表中是否存在环
判断一个单向链表中是否存在环原创 2013-09-11 13:26:11 · 4299 阅读 · 1 评论 -
编程之美_单链表面试题_结合3.4_3.6 .
一、单链表结点的删除0、删除单链表p指向的那个元素,(时间和空间复杂度尽量小)二、单链表的存取1、找出单链表的倒数第K个元素,(仅允许遍历一遍链表)2、找出单链表的中间元素,(仅允许遍历一遍链表)三、单链表与环的问题3、判断单链表是否有环(6形状)?4、如何找到环的入口?5、如何知道环的长度?6、带环链表的长度是多少?四、单链表与相交、环的问转载 2013-10-04 14:53:29 · 1291 阅读 · 0 评论 -
常见笔试题三
入口在.main()/WinMain()Windows应用程序消息处理机制:A. 操作系统接收应用程序的窗口消息,将消息投递到该应用程序的消息队列中B. 应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息,取出消息后,应用程序可以对消息进行一些预处理。C. 应用程序调用DispatchMessage,将消息回传给操作系统。D. 系统利用WNDCLAS转载 2013-10-03 20:49:37 · 2301 阅读 · 1 评论 -
面试题44:字符串的左旋操作
思路:先分别内部旋转两部分,然后整体旋转字符串代码如下:#include "stdafx.h"#include using namespace std;//翻转字符串pBegin和pEnd分别指向字符串的首尾字符void Reverse(char *pBegin, char *pEnd){ if (pBegin == NULL || pEnd == NULL)原创 2013-09-05 16:42:42 · 1058 阅读 · 0 评论 -
面试题43:丑数
方法一:逐个数进行判断是否为丑数,效率低下代码如下:#include "stdafx.h"#include using namespace std;//判断一个数是否为丑数 1被认为是第一个丑数bool IsUglyNum(int nNum){ if (nNum <= 0) { return false; } while (nNum %原创 2013-09-05 16:03:46 · 1178 阅读 · 0 评论 -
面试题42:不用加减乘除做加法
分析:(1)十进制加法分三步:(以5+17=22为例)1. 只做各位相加不进位,此时相加结果为12(个位数5和7想家不进位是2,十位数0和1相加结果是1);2. 做进位,5+7中有进位,进位的值是10;3. 将前面两个结果相加,12+10=22(2)这三步同样适用于二进制位运算1.不考虑进位对每一位相加。0加0、1加1结果都是0,0加1、1加0结果都是1。这和异或运算一样;原创 2013-09-05 13:31:34 · 7096 阅读 · 1 评论 -
面试题41:从字符串中找到第一个只出现一次的字符
思路:用数组模拟哈希表,保存字符和其出现次数的映射关系,然后从头开始扫描字符串即可求解代码如下:#include "stdafx.h"#include using namespace std;//从字符串中找到第一个只出现一次的字符char FirstNotRepeatChar(char *Str){ if (Str == NULL) { retu原创 2013-09-05 12:30:11 · 1712 阅读 · 1 评论 -
面试题40:输出和为指定值的连续正数序列
思路:1. 用两个变量分别表示序列的最小值和最大值。首先把他们分别初始化为1和2,2. 如果从最小值到最大值的序列之和大于给定值,则从序列中去掉最小值,也就是增大最小值;3. 如果从最小值到最大值的序列之和小于给定值,则增大最大值,让序列包含更多的数字4. 由于序列中至少有两个数字,我们一直增加最小值到(1+给定值)/2为止。代码如下:#include "stdafx.h"原创 2013-09-05 11:23:08 · 1819 阅读 · 0 评论 -
面试题39:求和为指定值的两个数
给定一个递增数组和一个数字S,在数组中找到两个数使得它们之和正好是S。思路:代码如下:#include "stdafx.h"#include using namespace std;bool FindNumbersWithSum(int nArr[], int nLength, int sum, int &nNum1, int &nNum2){ if (nA原创 2013-09-05 10:58:47 · 1602 阅读 · 0 评论 -
面试题38:翻转句子中单词的顺序,单词内字符的顺序不变
题目:给出一个英文句子,翻转句子中单词的顺序,单词内字符的顺序不变。例如:"I am a student."输出"student. a am I"思路:先翻转整个句子,然后翻转单词原创 2013-09-05 10:46:27 · 3264 阅读 · 2 评论 -
面试题34:简单背包问题
“背包题目”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1,w2,…,wn,希看从N件物品中选择若干物品,所选物品的重量之和恰能放进该背包,即所选物品的重量之和即是S。递归代码:#include "stdafx.h"#include #include using namespace std;const int N = 7;//物品数量原创 2013-09-04 19:08:06 · 8749 阅读 · 0 评论 -
面试题37:数组中只出现一次的数字
题目:整型数组中除了两个数字之外,其他的数字都出现两次,找出这两个只出现一次的数字思路:利用异或运算的性质:任何一个数字异或自己都等于0;1.从头到尾依次异或数组中的每个数字,最终得到的结果就是两个只出现一次的数字的异或结果;2. 异或结果的二进制表示中至少有一位为1,找到结果数字中第一个为1的位的位置,记为第n位;3. 以第n位是否为1为标准把原数组中的数字分为两个子数组,第一个原创 2013-09-04 21:14:31 · 1722 阅读 · 0 评论 -
面试题26:最小的k个数
方法一:对n个整数进行排序(快速排序或堆排序),取出前K个元素(最容易想到的最笨的方法,不可取)时间复杂度:O(n*logn) + O(k) = O(n*logn)采用快速排序的代码:#include "stdafx.h"#include using namespace std;//划分数组,找到枢轴元素下标,使得其左边的元素都比其小,右边的元素都比其大int Parti原创 2013-07-25 10:13:01 · 1153 阅读 · 0 评论 -
面试题25:数组中出现次数超过一半的数字
方法一:先对数组进行排序,再遍历排序后的数组,统计每个数的次数,出现次数最大的数即为要找的数。时间复杂度 O(nlogn) + O(n) = O(nlogn)不需要额外存储空间方法二:先对数组进行排序,出现次数超过数组长度的一半的数必然是数组中间的那个数时间复杂度O(nlgn)+ O(1)= O(nlgn)不需要额外存储空间方法三:不排序,扫描原创 2013-07-25 10:16:12 · 1150 阅读 · 0 评论 -
面试题14:反转链表
代码:#include "stdafx.h"#include using namespace std;struct ListNode{ int m_nValue; ListNode *m_pNext;};ListNode *ReverseList(ListNode *pListHead){ if (pListHead == NULL) { return NULL;原创 2013-07-21 15:11:53 · 1068 阅读 · 0 评论 -
面试题12:调整数组顺序使奇数位于偶数前
思路:1. 设置两个指针,初始状态第一指针指向数组的第一个数,第二个指针指向数组的最后一个数;2. 若第一个指针指向的数是奇数,则指针向右移动一位,第二个指针指向的数是偶数,则指针向左移动;3. 若第一个指针和第二个指针指向的数恰好分别为偶数和奇数,则交换数字。代码:原创 2013-07-20 22:05:13 · 1132 阅读 · 0 评论 -
面试题10:二进制中1的个数
方法一:代码:#include "stdafx.h"#include using namespace std; int CountOf1(int n) { int nCount = 0; while (n) { if (n & 1) { nCount++; } n = n >> 1; } return nCount;原创 2013-07-20 11:05:05 · 1767 阅读 · 0 评论 -
面试题9:斐波那契数列
方法一:很容易想到的解法是直接使用递归。C++代码:#include "stdafx.h"#include using namespace std;long long Fibonacci(unsigned int n){ if (n == 0) { return 0; } if (n == 1) { return 1; } return原创 2013-07-20 10:02:55 · 1626 阅读 · 0 评论 -
面试题8:旋转数组中的最小数字
旋转数组的特点:(1)递增排序的数组旋转之后的数组可划分为两个排序的子数组;(2)前面的子数组的元素都大于或等于后面子数组的元素;(3)最小的元素刚好是两个子数组的分界线;(4)旋转数组在一定程度上是有序的; 在有序的数组中可以用二分查找实现O(logn)的查找,我们也可用二分查找的思想寻找旋转数组的最小数字。思路:1. 设置两个指针,初始状态第一个指针原创 2013-07-19 22:56:14 · 4975 阅读 · 2 评论 -
面试题7:用两个队列实现栈
题目:用两个队列实现一个栈。实现两个函数push和pop,完成从栈顶插入和删除结点的功能。原创 2013-07-19 16:39:54 · 1517 阅读 · 1 评论 -
面试题5:重建二叉树
思路:先根据先序序列第一个数建立根节点,然后再中序序列中找到根节点的位置,进而确定左右子树的前序序列和后序序列,递归的构建左右子树。C++代码:#include "stdafx.h"#include #include using namespace std;struct BiTreeNode{ int m_nData; BiTreeNode *m_pLeftChild;原创 2013-07-19 10:59:43 · 1136 阅读 · 0 评论 -
面试题6:用两个栈实现队列
题目:用两个栈实现一个队列。请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。原创 2013-07-19 15:45:37 · 1240 阅读 · 0 评论 -
面试题4:从尾到头打印链表
方法一:利用栈实现C++代码:#include "stdafx.h"#include #include using namespace std;//链表中的结点类型struct ListNode{ int m_nKey; ListNode *m_pNext;};//从尾到头打印链表void PrintLinkedListReversely(ListNode *pH原创 2013-07-18 21:34:14 · 1442 阅读 · 0 评论 -
面试题2:二维数组中的查找
查找思路:首先选取数组中右上角的数字,如果该数字等于要查找的数字,查询过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每次都在数组的查找范围中剔除一行或一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。原创 2013-07-14 15:56:07 · 2104 阅读 · 0 评论 -
面试题3:替换空格和清除空格
一、替换空格请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.",则输出”We%20are%20happy."分析:在空间复杂度尽可能低的情况下,不允许开辟一个新的数组来存放替换空格后的字符串。如果从前往后替换字符串,那么保存在空格后面的字符串肯定会被覆盖。假设字符串的长度为n。对每个空格字符,需要移动后面O(n)个字符,因此对含有O(n)个空格字符原创 2013-07-15 10:41:38 · 3157 阅读 · 3 评论 -
面试题15:合并两个排序的链表
方法一:非递归代码:#include "stdafx.h"#include using namespace std;struct ListNode{ int m_nValue; ListNode *m_pNext;};//合并两个有序链表,非递归方法ListNode *MergeTwoList(ListNode *pListOneHead, ListNode *pLi原创 2013-07-21 16:41:34 · 9834 阅读 · 2 评论 -
面试题16:树的子结构
思路:首先在树A中找到和B的根结点的值一样的结点R,然后再判断树A中以R为根的子树是否包含树B一样的结构。递归代码:#include "stdafx.h"#include using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pR原创 2013-07-21 21:13:36 · 1266 阅读 · 0 评论