各大公司笔试题及答案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各大公司笔试题及答案相关的知识,希望对你有一定的参考价值。
腾讯笔试题:const的含义及实现机制const的含义及实现机制,比如:const int i,是怎么做到i只可读的?
const用来说明所定义的变量是只读的。
这些在编译期间完成,编译器可能使用常数直接替换掉对此变量的引用。
更多阅读:
http://www.92ask.net/Archive/?action=show&id=18
初探编译器static、const之实现原理
腾讯笔试题:买200返100优惠券,实际上折扣是多少?
到商店里买200的商品返还100优惠券(可以在本商店代替现金)。请问实际上折扣是多少?
由于优惠券可以代替现金,所以可以使用200元优惠券买东西,然后还可以获得100元的优惠券。
假设开始时花了x元,那么可以买到 x + x/2 + x/4 + ...的东西。所以实际上折扣是50%.(当然,大部分时候很难一直兑换下去,所以50%是折扣的上限)
如果使用优惠券买东西不能获得新的优惠券,那么
总过花去了200元,可以买到200+100元的商品,所以实际折扣为 200/300 = 67%.
腾讯笔试题:tcp三次握手的过程,accept发生在三次握手哪个阶段?
accept发生在三次握手之后。
第一次握手:客户端发送syn包(syn=j)到服务器。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k)。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)。
三次握手完成后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接。
腾讯笔试题:用UDP协议通讯时怎样得知目标机是否获得了数据包
用UDP协议通讯时怎样得知目标机是否获得了数据包?
可以在每个数据包中插入一个唯一的ID,比如timestamp或者递增的int。
发送方在发送数据时将此ID和发送时间记录在本地。
接收方在收到数据后将ID再发给发送方作为回应。
发送方如果收到回应,则知道接收方已经收到相应的数据包;如果在指定时间内没有收到回应,则数据包可能丢失,需要重复上面的过程重新发送一次,直到确定对方收到。
关于UDP协议的简单介绍,可以参考
http://baike.baidu.com/view/30509.htm
腾讯笔试题:统计论坛在线人数分布
求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每个ID从登陆到退出会向一个日志文件中记下登陆时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。
一天总共有 3600*24 = 86400秒。
定义一个长度为86400的整数数组int delta[86400],每个整数对应这一秒的人数变化值,可能为正也可能为负。开始时将数组元素都初始化为0。
然后依次读入每个用户的登录时间和退出时间,将与登录时间对应的整数值加1,将与退出时间对应的整数值减1。
这样处理一遍后数组中存储了每秒中的人数变化情况。
定义另外一个长度为86400的整数数组int online_num[86400],每个整数对应这一秒的论坛在线人数。
假设一天开始时论坛在线人数为0,则第1秒的人数online_num[0] = delta[0]。第n+1秒的人数online_num[n] = online_num[n-1] + delta[n]。
这样我们就获得了一天中任意时间的在线人数。
腾讯笔试题:从10G个数中找到中数
在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。
不妨假设10G个整数是64bit的。
2G内存可以存放256M个64bit整数。
我们可以将64bit的整数空间平均分成256M个取值范围,用2G的内存对每个取值范围内出现整数个数进行统计。这样遍历一边10G整数后,我们便知道中数在那个范围内出现,以及这个范围内总共出现了多少个整数。
如果中数所在范围出现的整数比较少,我们就可以对这个范围内的整数进行排序,找到中数。如果这个范围内出现的整数比较多,我们还可以采用同样的方法将此范围再次分成多个更小的范围(256M=2^28,所以最多需要3次就可以将此范围缩小到1,也就找到了中数)。
腾讯笔试题:两个整数集合A和B,求其交集
两个整数集合A和B,求其交集。
1. 读取整数集合A中的整数,将读到的整数插入到map中,并将对应的值设为1。
2. 读取整数集合B中的整数,如果该整数在map中并且值为1,则将此数加入到交集当中,并将在map中的对应值改为2。
通过更改map中的值,避免了将同样的值输出两次。
腾讯笔试题:找出1到10w中没有出现的两个数字
有1到10w这10w个数,去除2个并打乱次序,如何找出那两个数?
申请10w个bit的空间,每个bit代表一个数字是否出现过。
开始时将这10w个bit都初始化为0,表示所有数字都没有出现过。
然后依次读入已经打乱循序的数字,并将对应的bit设为1。
当处理完所有数字后,根据为0的bit得出没有出现的数字。
首先计算1到10w的和,平方和。
然后计算给定数字的和,平方和。
两次的到的数字相减,可以得到这两个数字的和,平方和。
所以我们有
x + y = n
x^2 + y^2 = m
解方程可以得到x和y的值。
腾讯笔试题:需要多少只小白鼠才能在24小时内找到毒药
有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?
最容易想到的就是用1000只小白鼠,每只喝一瓶。但显然这不是最好答案。
既然每只小白鼠喝一瓶不是最好答案,那就应该每只小白鼠喝多瓶。那每只应该喝多少瓶呢?
首先让我们换种问法,如果有x只小白鼠,那么24小时内可以从多少瓶水中找出那瓶有毒的?
由于每只小白鼠都只有死或者活这两种结果,所以x只小白鼠最大可以表示2^x种结果。如果让每种结果都对应到某瓶水有毒,那么也就可以从2^x瓶水中找到有毒的那瓶水。那如何来实现这种对应关系呢?
第一只小白鼠喝第1到2^(x-1)瓶,第二只小白鼠喝第1到第2^(x-2)和第2^(x-1)+1到第2^(x-1) + 2^(x-2)瓶....以此类推。
回到此题,总过1000瓶水,所以需要最少10只小白鼠。
腾讯笔试题:根据上排的数填写下排的数,并满足要求。
根据上排给出十个数,在其下排填出对应的十个数, 要求下排每个数都是上排对应位置的数在下排出现的次数。上排的数:0,1,2,3,4,5,6,7,8,9。
腾讯笔试题:判断数字是否出现在40亿个数中?
给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中?
答案:
unsigned int 的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512M的内存,用每一个bit对应一个unsigned int数字。首先将512M内存都初始化为0,然后每处理一个数字就将其对应的bit设置为1。当需要查询时,直接找到对应bit,看其值是0还是1即 可。
1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句#define Max(a,b) ( a/b)?a:b
2、如何输出源文件的标题和目前执行行的行数
int line = __LINE__;
char *file = __FILE__;
cout<<"file name is "<<(file)<<",line is "<
3、两个数相乘,小数点后位数没有限制,请写一个高精度算法
4、写一个病毒
while (1)
int *p = new int[10000000];
5、不使用额外空间,将 A,B两链表的元素交*归并
6、将树序列化 转存在数组或 链表中
struct st
int i;
short s;
char c;
;
sizeof(struct st);
7、
char * p1;
void * p2;
int p3;
char p4[10];
sizeof(p1...p4) =?
8、
4,4,4,10
二分查找
快速排序
双向链表的删除结点
面试基本上都是和项目相关的,并当场说几个程序题的输出,不能用草稿纸
微软笔试题:写程序找出二叉树的深度
一个树的深度等于max(左子树深度,右子树深度)+1。可以使用递归实现。
假设节点为定义为
1. struct Node
2. Node* left;
3. Node* right;
4. ;
5. int GetDepth(Node* root)
6. if (NULL == root)
7. return 0;
8.
9. int left_depth = GetDepth(root->left);
10. int right_depth = GetDepth(root->right);
11. return left_depth > right_depth ? left_depth + 1 : right_depth + 1;
12.
微软笔试题:利用天平砝码,三次将140克的盐 分成50、90克两份?
有一个天平,2克和7克砝码各一个。如何利用天平砝码在三次内将140克盐分成50,90克两份。
第一种方法:
第一次:先称 7+2克盐 (相当于有三个法码2,7,9)
第二次:称2+7+9=18克盐 (相当于有2,7,9,18四个法码)
第三次:称7+18=x+2,得出x是23,23+9+18=50克盐.
剩下就是90克了.
第二种方法:
1.先把140克盐分为两份,每份70克
2.在把70克分为两份,每份35克
3.然后把两个砝码放在天平两边,把35克面粉分成两份也放在两边(15+7=20+2)
现在有四堆面粉70,35,15,20,分别组合得到
70+20=90
35+15=50
微软笔试题:地球上有多少个满足这样条件的点
站在地球上的某一点,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点。地球上有多少个满足这样条件的点?
北极点满足这个条件。
距离南极点很近的一个圈上也满足这个条件。在这个圆圈上,向南走一公里,然后向东走一公里恰好绕南极点一圈,向北走一公里回到原点。
所以地球上总共有无数点满足这个条件。
或者
首先,在地球表面上,南北走向是沿着经度方向,东西是沿着纬度方向。如果你一直往北走就会达到北极点,往南走就到了南极点。因此,向南走一公里,然 后向东走一公里,最后向北走一公里,回到了原点,一种情况就是,出发点是在北极点,这样向南走一公里,然后向东走任意几公里,最后向北走一公里,最后都会 回到北极点;
其次,可以这么认为如果从A点向南走一公里到达B点,那么若向东走一公里能回到B,那么最后向北走一公里,就能回到了原点A。这样就可以先找出在南 北极点附近找出绕一周只有1公里的圈,那么这个圈落在南极附近时,只要往北推1公里,此时该圈上的点都能满足;若这个圈落在北极附近时,能不能往北推1公 里我就不分析了。反正在南极附近能找到任意多个点就能回到这个问题了
微软笔试题:正确标注水果篮
有三个水果篮。其中一个里面只有苹果,一个里面只有橘子,另外一个既有苹果又有橘子。每个水果篮上都有标签,但标签都是错的。如何检查某个水果篮中的一个水果,然后正确标注每个水果篮?
从标注成既有苹果也有橘子的水果篮中选取一个进行检查。
如果是橘子,则此篮中只有橘子;标有橘子的水果篮中只有苹果;标有苹果的水果篮中既有苹果也有橘子。
如果是苹果,则此篮中只有苹果;标有苹果的水果篮中只有橘子;标有橘子的水果篮中既有苹果也有橘子。
微软笔试题:不利用浮点运算,画一个圆
不利用浮点运算,在屏幕上画一个圆 (x**2 + y**2 = r**2,其中 r 为正整数)。
考虑到圆的对称性,我们只需考虑第一象限即可。
等价于找到一条连接点(0,r)到点(r,0)的一条曲线,曲线上的点距圆心(0,0)的距离最接近 r。
我们可以从点(0,r)开始,搜索右(1,r),下(0,r-1),右下(1,r-1)三个点到圆心的距离,选择距圆心距离最接近 r 的点作为下一个点。反复进行这种运算,直至到达点(r,0)。
由于不能利用浮点运算,所以距离的比较只能在距离平方的基础上进行。也就是比较 x**2 + y**2 和 r**2之间的差值。
微软笔试题:将一个句子按单词反序
将一个句子按单词反序。比如 “hi baidu com mianshiti”,反序后变为 “mianshiti com baidu hi”。
可以分两步走:
第一步按找字母反序,“hi baidu com mianshiti” 变为 “itihsnaim moc udiab ih”。
第二部将每个单词中的字母反序,“itihsnaim moc udiab ih” 变成 “mianshiti com baidu hi”。
这个方法可以在原字符串上进行,只需要几个整数变量来保持指针即可,空间复杂度低。
微软笔试题:计算n bit的整数中有多少bit 为1
设此整数为x。
方法1:
让此整数除以2,如果余数为1,说明最后一位是1,统计值加1。
将除得的结果进行上面运算,直到结果为0。
方法2:
考虑除法复杂度有些高,可以使用移位操作代替除法。
将 x 和 1 进行按位与操作(x&1),如果结果为1,说明最后一位是1,统计值加1。
将x 向右一位(x >> 1),重复上面过程,直到移位后结果为0。
方法3:
如果需要统计很多数字,并且内存足够大,可以考虑将每个数对应的bit为1的数量记录下来,这样每次计算只是一次查找操作。
1. int n = 0;while (x)
2.
3. xx = x & (x - 1);
4. n++;
5.
6. return n;
微软笔试题:快速求取一个整数的7倍
乘法相对比较慢,所以快速的方法就是将这个乘法转换成加减法和移位操作。
可以将此整数先左移三位(×8)然后再减去原值:X << 3 - X。
微软笔试题:判断一个数是不是2的n次幂
设要判断的数是无符号整数X。
首先判断X是否为0,如果为0则不是2的n次幂,返回。
X和X-1进行按位与操作,如果结果是0,则说明这个数是2的n次幂;如果结果非0,则说明这个数不是2 的n次幂。
证明:
如果是2的n次幂,则此数用二进制表示时只有一位是1,其它都是0。减1后,此位变成0,后面的位变成1,所以按位与后结果是0。
如果不是2的n次幂,则此数用二进制表示时有多位是1。减1后,只有最后一个1变成0,前面的 1还是1,所以按位与后结果不是0。
微软笔试题:三只蚂蚁不相撞的概率是多少
在三角形的三个顶点上各有一只蚂蚁,它们向另一个顶点运动,目标随机(可能为另外两个顶点的任意一个)。问三只蚂蚁不相撞的概率是多少?
如果蚂蚁顺时针爬行记为0,逆时针爬行记为1。那么三只蚂蚁的状态可能为000,001,...,110,111中的任意一个,且为每种状态的概率相等。在这8种状态中,只有000和111可以避免相撞,所以蚂蚁不相撞的概率是1/4。
微软笔试题:判断数组中是否包含重复数字
给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字。(原数组不必保留)
给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字。(原数组不必保留)
微软笔试题:如何将蛋糕切成相等的两份
一块长方形的蛋糕,其中有一个小长方形的空洞(角度任意)。使用一把直刀,如何一刀将蛋糕切成相等的两份?
通过长方形中心的的任意直线都能将长方形等分,所以连接两个长方形的中心点的直线可以等分这个蛋糕。
一个没有排序的链表,比如list=a,l,x,b,e,f,f,e,a,g,h,b,m,请去掉重复项,并保留原顺序,以上链表去掉重复项后为newlist=a,l,x,b,e,f,g,h,m,请写出一个高效算法(时间比空间更重要)。
建立一个hash_map,key为链表中已经遍历的节点内容,开始时为空。
从头开始遍历链表中的节点:
- 如果节点内容已经在hash_map中存在,则删除此节点,继续向后遍历;
- 如果节点内容不在hash_map中,则保留此节点,将节点内容添加到hash_map中,继续向后遍历。
微软笔试题:小明一家5口如何过桥?
小明一家过一座桥,过桥时是黑夜,所以必须有灯。现在小明过桥要1秒,小明的弟弟要3秒,小明的爸爸要6秒,小明的妈妈要8秒,小明的爷爷要12秒。每次此桥最多可过两人,而过桥的速度依过桥最慢者而定,而且灯在点燃后30秒就会熄灭。问:小明一家如何过桥?
小明与弟弟过去,小明回来,用4s;
妈妈与爷爷过去,弟弟回来,用15s;
小明与弟弟过去,小明回来,用4s;
小明与爸爸过去,用6s;
总共用29s。
题目的关键是让速度差不多的一起走,免得过于拖累较快的一个人。
微软笔试题:编一个程序求质数的和
编一个程序求质数的和,例如F(7) = 2+3+5+7+11+13+17=58。
方法1:
对于从2开始的递增整数n进行如下操作:
用 [2,n-1] 中的数依次去除n,如果余数为0,则说明n不是质数;如果所有余数都不是0,则说明n是质数,对其进行加和。
空间复杂度为O(1),时间复杂度为O(n^2),其中n为需要找到的最大质数值(例子对应的值为17)。
方法2:
可以维护一个质数序列,这样当需要判断一个数是否是质数时,只需判断是否能被比自己小的质数整除即可。
对于从2开始的递增整数n进行如下操作:
用 [2,n-1] 中的质数(2,3,5,7,开始时此序列为空)依次去除n,如果余数为0,则说明n不是质数;如果所有余数都不是0,则说明n是质数,将此质数加入质数序列,并对其进行加和。
空间复杂度为O(m),时间复杂度为O(mn),其中m为质数的个数(例子对应的值为7),n为需要找到的最大质数值(例子对应的值为17)。
方法3:
也可以不用除法,而用加法。
申请一个足够大的空间,每个bit对应一个整数,开始将所有的bit都初始化为0。
对于已知的质数(开始时只有2),将此质数所有的倍数对应的bit都改为1,那么最小的值为0的bit对应的数就是一个质数。对新获得的质数的倍数也进行标注。
对这样获得的质数序列累加就可以获得质数和。
空间复杂度为O(n),时间负责度为O(n),其中n为需要找到的最大质数值(例子对应的值为17)。 参考技术A 什么公司的笔试题?也不说清楚。
这里有各行业各种职位的笔试题,还有部份大公司的笔试真题。
百度一下“job006”
冒死潜入某个外包公司获得的珍贵Java基础笔试题(附答案)
前言
大家好,我是程序员
manor
,上次货拉拉面试太打击心情,于是我决定找些小boss打打让自己愉悦起来,于是就有了下面👇这篇Java基础面试笔试题,
文章末尾给出答案
JAVA基础笔试题目
一、单选题( 共8题,每题2分 )
1、下列语句哪一个正确( )
A. Java程序经编译后会产生machine code
B. Java程序经编译后会产生byte code
C. Java程序经编译后会产生DLL
D. 以上都不正确
2、下列说法正确的有( )
A. class中的constructor不可省略
B. constructor必须与class同名,但方法不能与class同名
C. constructor在一个对象被new时执行
D. 一个class只能定义一个constructor
3、提供Java存取数据库能力的包是( )
A.java.sql
B.java.awt
C.java.lang
D.java.swing
4、下列运算符合法的是( )
A.&&
B.<>
C.if
D.:=
5、执行如下程序代码
a=0;c=0; do{
–c;
a=a-1;
}
while(a>0);
后,c的值是( )
A.0
B.1
C.-1
D.死循环
6、下列哪一种叙述是正确的( )
A.abstract修饰符可修饰字段、方法和类
B.抽象方法的body部分必须用一对大括号{ }包住
C.声明抽象方法,大括号可有可无
D.声明抽象方法不可写出大括号
7、在Java中,表示换行符的转义字符是( )
A \\n
B \\f
C „n?6?8
D \\dd
8、HttpServletRequest对象的( )方法能够获取一个表单参数的值:
A. getQuaryString()
B. getPathInfo()
C. getParameter()
D. getAttribute()
二、多选题( 共7题,每题4分 )
1、下列标识符不合法的有( )
A.new
B.$Usdollars
C.1234
D.car.taxi
2、下列说法错误的有( )
A.数组是一种对象
B.数组属于一种原生类
C.int number=[]={31,23,33,43,35,63}
D.数组的大小可以任意改变
3、不能用来修饰interface的有( )
A.private
B.public
C.protected
D.static
4、下列说法错误的有( )
A. 在类方法中可用this来调用本类的类方法
B. 在类方法中调用本类的类方法时可直接调用
C. 在类方法中只能调用本类中的类方法
D. 在类方法中绝对不能调用实例方法
5、下列说法错误的有( )
A. Java面向对象语言容许单独的过程与函数存在
B. Java面向对象语言容许单独的方法存在
C. Java语言中的方法属于类中的成员(member)
D. Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同
6、Servlet API 由哪两个包组成?( )
A. javax.servlet
B. javax.servlet.jsp
C. javax.servlet.http
D. java.servlet
7、 关于异常处理机制的叙述哪些正确 ( )
A. catch部分捕捉到异常情况时,才会执行finally部分
B. 当try区段的程序发生异常时,才会执行catch区段的程序
C. 不论程序是否发生错误及捕捉到异常情况,都会执行finally部分
D. 以上都是
三、简答题( 共4题,每题10分 )
1、简单分析Java语言中的final, finally, finalize三者的区别。
2、Overload(方法重载)和Override(方法重写)的区别。Overloaded的方法是否可以改变返回值的类型?
3、abstract class(抽象类)和interface(接口)有什么区别?
4、ArrayList Vector LinkedList 的存储性能好特性,HashMap和Hashtable的区别。
四、综合题( 共1题,共16分 )
1、编写程序,计算任意两个日期之间间隔的天数。
看看你能得多少分?
------------------------------------------我是答案分割线-----------------------------------------------------------------------
JAVA基础笔试题目
一、单选题( 共8题,每题2分 )
1、下列语句哪一个正确(B )
A. Java程序经编译后会产生machine code
B. Java程序经编译后会产生byte code
C. Java程序经编译后会产生DLL
D. 以上都不正确
2、下列说法正确的有( C )
A. class中的constructor不可省略
B. constructor必须与class同名,但方法不能与class同名
C. constructor在一个对象被new时执行
D. 一个class只能定义一个constructor
3、提供Java存取数据库能力的包是( A )
A.java.sql
B.java.awt
C.java.lang
D.java.swing
4、下列运算符合法的是( A )
A.&&
B.<>
C.if
D.:=
5、执行如下程序代码
a=0;c=0; do{
–c;
a=a-1;
}
while(a>0);
后,c的值是(C )
A.0
B.1
C.-1
D.死循环
6、下列哪一种叙述是正确的( D )
A.abstract修饰符可修饰字段、方法和类
B.抽象方法的body部分必须用一对大括号{ }包住
C.声明抽象方法,大括号可有可无
D.声明抽象方法不可写出大括号
7、在Java中,表示换行符的转义字符是(A )
A \\n
B \\f
C „n‟
D \\dd
8、HttpServletRequest对象的( C )方法能够获取一个表单参数的值:
A. getQuaryString()
B. getPathInfo()
C. getParameter()
D. getAttribute()
二、多选题( 共7题,每题4分 )
1、下列标识符不合法的有(ACD )
A.new
B.$Usdollars
C.1234
D.car.taxi
2、下列说法错误的有( BCD )
A.数组是一种对象
B.数组属于一种原生类
C.int number=[]={31,23,33,43,35,63}
D.数组的大小可以任意改变
3、不能用来修饰interface的有(ACD )
A.private
B.public
C.protected
D.static
4、下列说法错误的有( ACD )
A. 在类方法中可用this来调用本类的类方法
B. 在类方法中调用本类的类方法时可直接调用
C. 在类方法中只能调用本类中的类方法
D. 在类方法中绝对不能调用实例方法
5、下列说法错误的有( ABC )
A. Java面向对象语言容许单独的过程与函数存在
B. Java面向对象语言容许单独的方法存在
C. Java语言中的方法属于类中的成员(member)
D. Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同
6、Servlet API 由哪两个包组成?(AC )
A. javax.servlet
B. javax.servlet.jsp
C. javax.servlet.http
D. java.servlet
7、 关于异常处理机制的叙述哪些正确 ( BC )
A. catch部分捕捉到异常情况时,才会执行finally部分
B. 当try区段的程序发生异常时,才会执行catch区段的程序
C. 不论程序是否发生错误及捕捉到异常情况,都会执行finally部分
D. 以上都是
三、简答题( 共4题,每题10分 )
1、简单分析Java语言中的final, finally, finalize三者的区别。
final:修饰符(关键字)有三种用法:修饰类、变量和方法。
修饰类时,意味着它不能再派生出新的子类,即不能被继承,因此它和 abstract 是反义词。修饰变量时,该变量使用中不被改变,必须在声明时给定初值,在引用中只能读取不可修改,即为常量。
修饰方法时,也同样 只能使用,不能在子类中被重写。
finally:通常放在 try…catch 的后面构造最终执行代码块,这就意味着程序无论正常执行
还是发生异常,这里的代码只要 JVM 不关闭都能执行,可以将释放外部资源的代码写在 finally 块中。
finalize:Object 类中定义的方法,Java 中允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的,通过重写 finalize() 方法可以整理系统资源或者执行其他清理工作。
2、Overload(方法重载)和Override(方法重写)的区别。Overloaded的方法是否可以改变返回值的类型?
Overload是重载的意思,
Override是覆盖的意思,也就是重写。
Override覆盖要注意以下的几点:
1.覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2.覆盖的方法的返回值必须和被覆盖的方法的返回值一致;
3.被覆盖的方法不能为private,
否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
4.子类覆盖父类方法,方法访问权限必须大于等于父类
5.覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
overload要注意以下的几点:
1.重载只和参数列表有关。例如,不同的参数类型,不同的参数个数,不同的参数顺序
2.不能通过访问权限、返回类型、抛出的异常进行重载;
3.方法的异常类型和数目不会对重载造成影响;
4.对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
3、abstract class(抽象类)和interface(接口)有什么区别?
主要有以下6点区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
6. 一个类可以实现多个接口,但只能继承一个抽象类
4、ArrayList Vector LinkedList 的存储性能好特性,HashMap和Hashtable的区别。
ArrayList Vector:以数组的方式存储,增、删慢,查、改快
ArrayList:线程不安全,速度快
Vector:线程安全,速度慢(synchoronized)
LikedList: 以单链表的方式存储,增、删快,查、改慢
HashMap与Hashtable都实现的Map接口,
HashTable线程安全,HashMap线程不安全。
四、综合题( 共1题,共16分 )
1、编写程序,计算任意两个日期之间间隔的天数。
package com.ct;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/**
* @author ChinaManor
* #Description demo
* #Date: 10/8/2021 22:56
*/
public class demo {
public static void main(String[] args) {
System.out.println("请输入第一个日期:");
String date = new Scanner(System.in).next();
System.out.println("请输入第二个日期:");
String date2 = new Scanner(System.in).next();
count(date,date2);
}
private static void count(String date, String date2) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date d1 = sdf.parse(date);
Date d2 = sdf.parse(date2);
long time = d1.getTime();
long time2 = d2.getTime();
long day = (time - time2) / 1000 / 60 / 60 / 24;
System.out.println(day);
} catch (ParseException e) {
System.err.println("日期错误!!");
}
}
}
总结
我是manor
一个默默努力的菜鸟程序员,我们下期再见~
以上是关于各大公司笔试题及答案的主要内容,如果未能解决你的问题,请参考以下文章