选择题
1、下面Java赋值语句错误的是( A )
A:float f = 45.0; B: char s = ‘\u0063’;
C: Object o = ‘f’; D: String s =”hello,world”;
2、关于Java中参数传递的说法,哪个是错误的(B)
A.在方法中,修改一个基础类型的参数不会影响原始参数值
B.在方法中,改变一个对象参数的引用不会影响到原始引用
C.在方法中,修改一个对象的属性会影响原始对象参数
D.在方法中,修改集合和Maps的元素不会影响原始集合参数
3、已知二叉树的前序遍历是:ABDHIEJCFKG,中序遍历是:HDIBEJAFKCG,请问他的后序遍历是(A)
A:HIDJEBKFGCA B:IHDJEBCFKGA
C:HIDJEBFKGCA D:IHDJEBFKGCA
4、设一组初始关键字记录(18,15,12,19,21,36,45,10),则这18位基准记录的一趟快速快速排序结束后的结果为(C)
A:10,15,12,18,19,36,45,21 B:10,15,12,18,19,45,36,21
C:10,15,12,18,21,36,45,19 D:10,15,12,18,21,45,36,19
5、正确的运行结果( A )
Public class Test1{
{
System.out.printLn(“test1 静态代码块”);
}
Private static Test2 test2 = new Test2();
Private static Test1 test1 = new Test1();
Public Test1(){
System.out.println(“test1 构造方法”);
}
Public static void main(String[] args ){
Test2 test2 = new Test2();
test2.print();
}
}
Class Test2{
Public Test2(){
System.out.println(“ test2 构造方法”);
}
Public void print(){
System.out.printlb(“ test2 打印方法”);
}
}
A:test2 构造方法 test1 静态代码块 test1 构造方法 test2 构造方法 rest2 打印方法
B:test2 构造方法 test1 构造方法 test1 静态代码块 test2 构造方法 test2 打印方法
C:test1 静态代码块 test2 构造方法 test1 构造方法 test2 构造方法 test2 打印方法
D:test1 静态代码块 test2 构造方法 test1 构造方法 test2 打印方法
2020校园招聘笔试
选择题:(一共15题,每题3分,共45分)
1、在计算机系统中哪些是线程与进程共用的(可多选)【 BD 】
A地址空间 B堆
C:栈 D:代码段
2、对于一台计算机中的一块存储了1TB数据的普通机械硬盘(SATALL 7.2k rpm),现有程序随机访问其中的任何1KB的数据,那么每秒钟可能的平均访问次数,下列数字中最可能接近的是:【 D 】
A:10次 B:100次
C:1000次 D:10000次
3、在一个单CPU、内存充足的计算机上,对1GB的4字节整数数组进行quick sort排序,大约需要多长时间?【 B 】
A:10秒 B:30秒
C:60秒 D:100秒
解释: 排序时间 = 比较时间(分支预测错误) + 内存访问时间。快排过程中会发生大量的分支预测错误,所以比较次数为2^28 * log (2^28) ≈ 2^33,其中约1/2的比较会发生分支预测错误,所以比较时间为1/2 * 2 ^ 32 * 5ns = 21s,另外,快排每次找到分割点都需要一遍内存移动操作,而内存顺序访问性能为4GB/s,所以内存访问时间为28 * 1GB / 4GB = 7s。因此,单线程排序1GB 4字节整数总时间约为28s
1、下列LINUX常用命令工具中那些对服务器性能检查有用(可多选)【ABCD 】
A:iostat B:vmstat
C:netstat D:top
解释:
vmstat: 每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态
netstat: etstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告
iostat:iostat工具将对系统的磁盘操作活动进行监视
2、top: 能够实时显示系统中各个进程的资源占用状况客户端(Client)和服务端(Server)的跨网络服务接口调用中(即:远程过程调用RPC)以下描述错误的是:【 】
A:客户端在调用前会主动发起和服务端建立连接,如TCP连接
B:客户端会将调用的接口标识和其参数打包编码后发送给服务端,编码格式可以由客户端和服务端灵活约定
C:服务端侧程序常常采用多线程实现对并发的支持
D:调用的返回结果由客户端侧产生
6、when you create a Java or C++ object by using “new ”, and hava a reference to point to the object. Please answer: (1) Where is the place the object itself lives in? (2)Where is the reference?【 】
A: The Stack, The Heap. B:The Stack,Register.
C:The Heap,Register. D:The Heap,The Stack
7、我们来万一个菜蔬字游戏: 我随意写下一个[0,1000000000]之间的数字但不告诉你,现在你了来猜我写的是什么数字。你每次猜测一个答案后,我会告诉你小了、大了或对了,你在多少次内一定能猜对?【 A 】
A:30次 B:256次
C:1000000次 D:1000000000次
解释:此题使用二分法:
python 代码为:
a=math.log2(1000000000)
# 结果为: 29.897352853986263
8、一下那些语句可以判断整数为2 的幂?(可多选)【ABD 】
A:n&(n-1) == 0 B: n == (n&-n)
C:n/2 == n%2 D:(n/2)%2==0
解释:位运算,请自行百度,很多不好解释
9、以下那些操作的时间复杂度是o*(nlogn)?(可多选)【 AD 】
A:堆排序 B:最糟情况下的快速排序(quick sort)
C:在二叉树中查找一个数 D:归并排序(或合并排序merge sort)
解释: 堆排序;时间复杂度为: O(nlogn)
最糟情况下的快速排序O(n^2)。
在二叉树中查找一个数(n(n+1)/2)
归并排序o(n*logn)
10、下列打码执行的时间复杂度是【 C 】
Void func(int x, int y, int z){
If(x<=0){
Printf(“ %d , %d \n ” , y ,z );
}
Else
{
Func( x - 1 , y + 1 , z );
Func( x - 1 , y , z + 1 );
}
}
A:O( x * y * z ) B:O( 2^x * 2^y * 2^z )
C:O( 2^x ) D:O(x!)
11、在一种RDBMS系统中(以MySQL为例,并采用了InnoDB作为存储引擎),我们建立了一张表t1(其Schema包含4个列c1,c2,c3,c4)。其Primary Key指定为列c1,并在该表的列c2上建立了B+Tree索引。我们向该表中写入3000万条记录。问下列SQL查询语句中,哪条SQL语句理论上执行小鹿最高?【 】
A:select * from t1 where c2 = “abc” and c3>1000 and c3<1050;
B:select * from t1 where c3 >1000 and c3<1050;
C:select * from t1 where c1 = “abc” and c3>1000 and c3<1050;
D:select * from t1 where c1 > ”abc” and c1 < ”abz” and c2 > ”aaa” and c2 < ”bbb”;
12、类P是一个抽象类,类F是一个 继承P的口抽象类,一下程序语句正确的是(可多选)【 ABF 】
A: P p = new F (); B: P p = new P();
C: F f = new F(); D: F f = new P();
13、下列C/C++代码片段中那段是可以正确执行的?【 】
A: void GetMemory(char *p){
p = (char *)molloc(100);
}
void Test(void){
char *str = NULL;
GetMemory(str);
Strcpy(str, ”hello world ”);
Printf(“%s”,str);
}
B: char *GetMemory(void){
char p[] = “hello world”;
return p;
}
void Test(void ){
char *str = NULL;
str = GetMemory();
printf(“%s”,str);
}
C: void GetMemory(char **p,int num){
P = (char )malloc(num);
}
void Test (void ){
char str = NULL;
GetMemory(&str,100);
strcpy(str, ”hello”);
printf(“%s”,str);
free(str);
}
D: void Test(void ){
Char str = (char )malloc(100);
Strcpy(str, ”hello”);
Free(str);
If(str != NULL){
Strcpy(str, “world”);
Printf(“%s” ,str);
}
}
14、给你几万条用户数据,每条用户数据的电话号码是其唯一的关键字段,请选择合适的数据结构,将这些用户数据加载到内存中管理起来。这个数据结构支持基于电话号码的快速查询,同时又支持新用户的快速插入(有新的用户不断注册进来):(可多选)【 AB 】
A:链表 B:哈希表
C:B+Tree D:队列
15、在房多多,有很多工作人员检查二手房源是不是属于虚假房源,假设所有的二手房源的真实率达到了98%,工作人员将一个真实二手房源检验为虚假二手房源的概率为2%,而一个虚假房源被检验为真实二手房源的概率为5%。那么一个被检验为真实二手房源那确实是真实的概率是多大【 B 】
A:0.9991 B:0.9989
C:0.9855 D:0.96
判断为真: 0.980.98+0.020.05
真的是真的等于1-P(真的里面的假的)= 1-((+0.020.05)/(0.980.98+0.020.05))= 0.9989598502184315
填空题:(一共5道题,每题5分,共25分)
1、一个全局变量tally,两个线程并发执行(代码段都是ThreadProctor),文两个线程都结束后,tally取值范围是:【50,100】
Int tally = 0;//global variable
void ThreadProc()
{
For(int i = 1; i<=50; i++)
Tally += 1 ;
}
2、运行下图中的C语言代码
bool Fun1 (char* str ){
printf(“%s” , str);
retuern false;
}
bool Fun2 (char* str){
printf(“%s” , str);
return ture;
}
int main (int argc , char * argv[]){
bool res1,res2;
Res1 = (Fun1(“a”) && Fun2(“b”)) || (Fun1(“c”) || Fun2(“d”));
Res2 = (Fun1(“a”) && Fun2(“b”)) && (Fun1(“c”) || Fun2(“d”));
}
输出打印的结果是【a、c、d、a】
3、函数reverse 完成将单链表逆转的炒作,它将链表
A(1)
A(n) ^
A(2)
P
变为
A(n)
A(n-1)
A(1) ^
p
程序:
void reverse( link *p ){
Link * ptr , *p1 , *p2;
ptr = p ;
p1 = NULL;
While ( ){
p2 = ptr ;
Ptr = ptr-> next;
P2->next=p1
p1 = p2;
}
p = p1;
}
4、求所有满足条件的三位数:它除以11 得到的商等于它各位数字的平方和。例如:
550,它除以11的商为50,它各位数字的平方和为55+55+00 = 50.使用穷尽三位数,寻找满足条件的数。
#include
void main(){
int i , j , n , s;
for(i = 100; i< = 999;i++){
n = j;
j= n/11;
s = 0;
while( n ){
s=s+(n%10)
n/ = 10;
}
if( j == s )
Printf(“%5d”,i);
}
}
5、以下程序的输出结构是(下列代码用java编写),如果没学过家擦可以当做伪代码理解
父类:
Public class FatherClass{
Public FatherClass(){
System.out.println(“FatherC;ass Create”);
}
}
子类:
Public class ChildClass extends FatherClass{
Public ChildClass(){
System.out.println(“ChildClass Create”);
}
Public static void main (String[] args){
FatherClass fc =new FatherClass();
Childclass cc = new ChildClass();
}
}
运行结果是:【FatherClass Create
FatherClass Create
ChildClass Create 】
问答题:(一共3题,每题10,共30分)
1、回头看一下选择题7。现在我们给定的数据范围不是[0,1000000000],而是更通用一般化的[min,max]。请写一段程序,给定任何的min、max,以及min和max之间的number,该程序运行后都可以快速告诉我们猜测的次数。(用你熟悉的任何编程语言,或者伪代码)
python ,使用二分法:
a=int(input(‘请输入起的数字’))
b=int(input(‘请输入止的数字’))
c=abs(a)+abs(b)
d=math.log2©
print(‘最大的次数’,math.floor(d))
2、给定一个存放整数的数组,请设计个函数,重新排列数组使得数组前面为奇数,后面全偶数,同时函数返回重排后第一个为偶数的元素在数组中的位置。
public class Test01{
public static void main(String[] args) {
int []array = {1,2,3,4,5,6,7,8,9,10,11,12,13};
reOrderArray(array);
for(int i=0;i
System.out.print(array[i]+" ");
}
for(int j=0;j
if(array[j]%2==0) {
System.out.println();
System.out.print(“第一个为偶数的元素在数组中的位置为:”+j);
return;
}
}
}
public static void reOrderArray(int []array)
{
int i=0;
int j=array.length-1;
while(i
}
3、我们通过网络爬虫从网络上爬取URL并保存在文件中假设我们分两个时段分别爬了大约50亿个URL,分别放在A、B两个文件中其中每个URL的平均打下大约64字节
现在你手头只有一台电脑,配置有足够的硬盘但剩余可用的内存只有4Gb,请设计一种可行的刚发,找出A、B两个文件中重读的URL,并将他们输出到一个新的文件C中。请写出设计思路和要点
(提升:50亿*64B = 320GB 远大于4GB)
答:我们的手里有50亿条数据,我们的数据大于4个G,那么我们的电脑是远远不够的,然后我们需要利用我们的其他工具了
1.如果重复率极高,我们可以采用SET 集合的去原理,进行去重,
2.如果重复率低,我们可以将其存入数据库中,逐行读取.每读取一次就判断数据库有没有,有就不插入,无就加入