美团2019校招后台开发题目总结
1.关于Java线程说法正确的是
A.线程创建后,调用start()方法进入就绪状态
B.线程创建后,调用run()方法进入就绪状态
C.在同一Thread对象上不允许两次调用start()方法
D.线程调用stop()后进入终止状态
B 调用run方法进入运行状态,被线程调度程序设置为当前线程
C同一Thread对象即同一线程,在线程的整个生命过程中,只会调用一次start()
2.Java Set中对象具有一下哪些特点
A.不能重复
B.每个对象包含一对键、值
C.按特定方式排序
D.无序
Set:
注重独一无二的性质
该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素
用于存储无序
(存入和取出的顺序不一定相同)元素,值不能重复。
JavaSet集合详解
3.有关接口说法正确的是
A.接口中的数据成员为final static
B.接口中的数据成员为public abstract
C.接口同样存在构造方法
D.实现接口的类必须实现该接口的所有抽象方法
接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必须是公开(public)类型的,确保外部使用者能访问它们;
接口仅仅描述系统能做什么,但不指明如何去做,所以接口中的方法都是抽象(abstract)方法;
接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态(static)变量。
接口的中的变量是所有实现类共有的,既然共有,肯定是不变的东西,因为变化的东西也不能够算共有。所以变量是不可变(final)类型,也就是常量了。
接口详解
4.下面程序的输出结果为
public class Test {public static void main(String[] args) {String [][]s={{"helloworld","hello world"},{"this is","a java program"}};System.out.println((new StringTokenizer(s[1][1])).countTokens()>2);}
}
A.3>2
B.2>2
C.false
D.true
StringTokenizer(String str):构造一个用来解析str的StringTokenizer对象,java 默认的分隔符是空格("")、制表符(\t)、换行符(\n)、回车符(\r)。
int countTokens():返回nextToken方法被调用的次数
默认分隔符是 3
Java StringTokenizer 类使用方法
5.下面程序的输出结果为( )
public class MyClass {public static void main(String[] args) {int i, a = 9, b = 6;for (i = 1; i <= a * b; i++) {if (i % a == 0 && i % b == 0)break;} System.out.println(a + b + "," + i);}
}
A.96,18
B.15,18
C.15,36
D.96,55
6.使用String类的方法( )可以返回第一次匹配字符串的位置
A.indexOf()
B.startWith()
C.getPosition()
D.getIndex()
查找指定字符或字符串在字符串中第一次出现地方的索引,未找到的情况返回 -1
Java indexOf()方法
#include <bits/stdc++.h>
using namespace std;
int main(){int n, x, a[15];deque<int> dq;cin >> n;for(int i = 1; i <= n; ++i){cin >> x;dq.push_back(x);}int ans = 0;while(!dq.empty()){ans += dq.back() - dq.front();dq.pop_back();dq.pop_front();}cout << ans << endl;
}
输入为:
10
1 6 2 5 4 9 8 2 4 5
7.则上述程序输出为( )
A.7
B.8
C.9
D.10
deque是双端队列
deque是动态大小的序列式容器,其可以向两端进行伸缩
push_back()是deque的尾插
back()返回deque中最后一个元素的引用
front()返回的eque中首元素的引用
pop_back()是deque的尾删
pop_front()是deque的头删
(5-1)+(4-6)+(2-2)+(8-5)+(9-4)=10
C++ deque容器介绍
#include <bits/stdc++.h>
using namespace std;
int main(){int x = 1;int* px = 0;px = &x;int *y = px;px = 0;cout << *y << endl;return 0;
}
8.上述程序输出为( )
A.0
B.1
C.2
D.3
x的地址赋给了px
所以px->x 相当于px保存着x的值1
int *y=px相当于y->x
所以无论px怎么变地址,y不变
9.有以下程序运行结果是abc-abc-,请为横线处选择合适的程序( )
#include <iostream>
#include <string>
using namespace std;
class S{ char p[10]; public: S(char *a) {set(a); } S & operator=(S &a) {_____________ return *this; } void show(){cout<<p<<"-";} ~S(){} void set(char *s){strcpy(p,s); }
}; int main() {S s1("abc"),s2("ABC"); s2=s1; s1.show(),s2.show();return 0;
}
A.set(a.p);
B.strcpy(p,a.p);
C.p=a.p;
D.strcpy(p,a);
S & operator=
重载=号操作(返回址)
~S()析构函数
strcpy()用于字符串复制,用法是传入2个字符数组指针来执行,如strcpy(a,b)是将b指向的字符串复制到a指向的空间中
10.程序的运行结果是123 : abc : 100,请为横线处选择合适的程序( )
#include<iostream>
#include<string>
using namespace std;
class Book { char*t;char a[10]; int n;
public:Book(){ } Book(char*str1,char str2[10],int num) { int len=strlen(str1);t=new char[len+1];strcpy(t,str1);strcpy(a,str2);n=num;} ~Book() {delete t;} void print(ostream &output) { output<<t<<":";output<<a<<":";output<<n<<endl;}
};int main(){ Book obj1("123","abc",100);obj1.print(_____);return 0;
}
A.cout
B.不填
C.cerr
D.clog
cout写到标准输出的ostream对象
cerr输出到标准错误的ostream对象,常用于程序错误信息
clog也是输出标准错误流
c++中cout、cerr、clog的区别
11.下列程序的功能是在A数组中查找值等于value的元素,请为横线处选择合适的程序( AC )
#include <iostream>
#include <functional>
using namespace std;
int main()
{ int A[5] = {5,3,1,4,2} ;int *location ;int value ;cin >> value;______________if (location != A + 5)cout << value << "是第" << (location-A)+1 << "个元素" << endl;elsecout << "error" << endl;return 0;
}
A.for(int i=0;i<5;i++)if(A[i]==value)location=&A[i];
B.for(int i=0;i<5;i++)if(A[i]==value)location=i;
C.location = find(A, A + 5,value)
D.for(int i=0;i<5;i++)if(A[i]==value)location=A[i];
find() 函数本质上是一个模板函数,用于在指定范围内查找和目标元素值相等的第一个元素。
InputIterator find (InputIterator first, InputIterator last, const T& val);
C++ find()函数用法
12.有以下程序运行结果是1,请为横线处选择合适的程序( )
#include <iostream>
#include <cmath>
using namespace std;
int fun(int i){int j,k,flag;flag = 1;k = sqrt(i);for (j = 2; j <= k; j++){if(i%j == 0){____________break;}}if (flag)return 1;else return 0;
}int main(){int a=97;cout<<fun(a);
}
A.j++;
B.i++;
C.不填
D.flag = 0;
四个选项结果都是对的,D更为合适
13.某公司要开发一个即时聊天软件,用户可以与多位好友同时聊天,在私聊时将产生多个聊天窗口,为提高窗口创建效率,要求根据第一个窗口快速创建其他窗口。在该需求情况下,应采用( )设计最为合适
A.享元模式
B.单例模式
C.组合模式
D.原型模式
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。
单例模式(Singleton Pattern)保证一个类仅有一个实例,并提供一个访问它的全局访问点。
组合模式(Composite Pattern)是用于把一组相似的对象当作一个单一的对象。将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。
原型模式
14.原型模式的本质是:
A.根据状态来分离和选择行为
B.封装请求
C.克隆生成对象
D.触发联动
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。
15.当需要控制一个类的实例只能有一个,而且客户端只能从一个全局访问点访问它,应该选择何种设计模式:
A.观察者模式
B.单例模式
C.迭代器模式
D.享元模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
单例模式(Singleton Pattern)保证一个类仅有一个实例,并提供一个访问它的全局访问点。
迭代器模式(Iterator Pattern)提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。运用共享技术有效地支持大量细粒度的对象。
单例模式
16.一级封锁协议可以( )
A.能够避免不可重复读取问题
B.能够避免不读“脏”数据
C.不能避免不可重复读取和不读“脏”数据的问题
D.可避免更新丢失的问题
A三级封锁协议
B二级封锁协议
一级封锁协议需要在修改数据时进行加锁,而读数据时不会进行加锁,所以不能保证可重复读和不读“
脏”
数据。
二级封锁协议在读取数据前进行加锁,读完后解锁,防止了丢失修改可以保证不会脏读但不能保证可重复读。
三级封锁协议在读数据时进行加锁,直到事务结束才解锁,保证不会脏读和可重复读。
17.在数据库ER图中,菱形框表示( )
A.实体
B.联系
C.属性
D.条件
矩形框----实体
椭圆形框----属性
菱形框----联系
数据库ER图基础概念整理
18.单CPU系统中通常采用两级处理器调度,以下相关描述正确的是( )
A.作业调度是从慢速存储设备中的后备队列中挑选作业加载到主存中
B.作业调度是从慢速存储设备中的 就绪队列中挑选作业加载到主存中
C.进程调度是从主存中重得后被队列中挑选进程占用处理器运行
D.进程调度是从主存中中的就绪队列中挑选进程占用处理器运行
19.系统采用页式存储管理方案,若页号块号对应关系存于内存中,且内存的访问时间为1μs,则当快表命中率为50%和85%时,有效的存取时间分别为( )
A.0.85μs和0.5μs
B.1.5μs和1.15μs
C.1.15μs和1.5μs
D.0.5μs和0.85μs
50%*1+50%(2*1)=1.5;
85%*1+15%(2*1)=1.15;
20.有关CSMA/CD协议特点描述正确的是( )
A.可抢占性的
B.不可抢占性的
C.半双工介质访问控制协议
D.全双工介质访问控制协议
A 若信道正忙,如果坚持侦听,发送的站一旦停止就立即抢占信道,但是有可能几个站同时侦听,同时都抢占信道
C 半双工:发送方在发送,接收方在监听,无法发送,无法成为全双工
CSMA/CD协议
21.系统工程师管理应用层协议时,首先要确定使用面向连接传输服务还是面向无连接服务,下列使用无连接传输的应用层协议有( )
A.ssh
B.snmp
C.dhcp
D.telnet
Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)
SNMP: 简单网络管理协议 使用无连接UDP
SSH: 安全外壳协议 采用面向连接的TCP协议传输 应用22号端口 安全系数较高。
DHCP: 动态主机配置协议 使用UDP进行工作
TELNET: 是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式
22.下列关于二叉排序树说法正确的是( )
A.二叉排序树的查找性能取决于二叉树的形状
B.二叉排序树的查找性能取决于序列的大小
C.二叉排序树复杂度介于O(log2n)和O(n)之间
D.对二叉排序树进行层序遍历可得到有序序列
D.对二叉排序树进行中序遍历可得到有序序列
二叉排序树(BST查找、插入、删除、遍历)
23.广度优先遍历二叉树的操作可以用哪种数据结构模拟( )
A.栈
B.单链表
C.队列
D.数组
深度用栈,广度用队列
24.已知主串S=“ababcabcacbab”,模式T=“abcac”。利用KMP算法进行匹配时,需要进行几次才可以匹配成功( )
A.3
B.4
C.5
D.6
首先计算部分匹配值:
abcac中:
a的前缀为0,后缀为0,前缀和后缀重合的部分为0
ab的前缀为a,后缀为b,前缀和后缀重合的部分为0
abc的前缀为[a,ab],后缀为[bc,b],前缀和后缀重合的部分为0
abca的前缀为[a,ab,abc],后缀为[bca,ca,a],前缀和后缀重合的部分为1
abcac的前缀为[a,ab,abc,abca],后缀为[bcac,cac,ac,c],前缀和后缀重合的部分为0
所以部分匹配值也就是 abcac 对应的next数组为:0 0 0 1 0
即:a b c a c
0 0 0 1 0
移动位数 = 已匹配的字符数 - 对应的部分匹配值
第一次 :
a b a b c a b c a c b a b
a b c a c
匹配个数为2,最后一个匹配的字符为 ‘b’,其next值是0 , 移动位数=2-0=2
第二次:
a b a b c a b c a c b a b
a b c a c
匹配个数为4,最后一个匹配的字符为 ‘a’,其next值是1, 移动位数=4-1=3
第三次:
a b a b c a b c a c b a b
a b c a c
匹配成功
共需要三次
KMP算法
25.已知存在8阶对称矩阵,采用压缩存储方式按行序为主序存储,每个元素占一个地址空间。若a22为元素的存储地址为1,每个元素占一个地址空间,则a74的地址为( )
A.11
B.23
C.32
D.33
由于是对称矩阵,因此压缩存储可以认为只要存储下三角矩阵。
(1,1)
(2,1) (2,2) 1
(3,1) (3,2) (3,3) 3
(4,1) (4,2) (4,3) (4,4) 4
(5,1) (5,2) (5,3) (5,4) (5,5) 5
(6,1) (6,2) (6,3) (6,4) (6,5) (6,6) 6
(7,1) (7,2) (7,3) (7,4) 4
1+3+4+5+6+4=23
26.下列序列规模较大时,选择哪种排序算法效率最高( )
A.直接选择排序
B.直接插入排序
C.冒泡排序
D.希尔排序
Shell排序通过将数据分成不同的组,先对每一组进行排序,然后再对所有的元素进行一次插入排序,以减少数据交换和移动的次数。平均效率是O(nlogn)。其中分组的合理性会对算法产生重要的影响。现在多用D.E.Knuth的分组方法。
Shell排序比冒泡排序快5倍,比插入排序大致快2倍。Shell排序比起QuickSort,MergeSort,HeapSort慢很多。但是它相对比较简单,它适合于数据量在5000以下并且速度并不是特别重要的场合。它对于数据量较小的数列重复排序是非常好的。
各种排序算法的稳定性和时间复杂度小结
27.使用二分法在序列1,4,6,7,15,33,39,50,64,78,75,81,89,96中查找元素81时,需要经过( )次比较
A.4
B.3
C.2
D.12
mid=(39+50)/2=45
81>45
mid=75
81>75
mid=89
81<89
设有一数组a[n],数组中的元素按值从小到大排列有序。用变量low、high和mid分别指示待查元素所在区间的下界、上界和中间位置。初始时,low=0,high=n-1。
- 令 mid = (low+ high) /2 。
- 比较给定值x与a[mid]值的大小
若a[mid] == x ,则查找成功,结束查找;
若a[mid]> x ,则表明给定值x只可能在区间low ~ mid-1内,修改检索范围。令high=mid-1,low值保持不变;
若a[mid]< x ,则表明给定值x只可能在区间mid+1~high内,修改检索范围。令low=mid+1,high值保持不变。
比较当前变量low和high的值,若low≤high,重复执行第1)、2)两步,若low>high,表明数组中不存在待查找的元素,查找失败。
28.对含有31个元素的序列采用直接选择排序算法排序,在最坏情况下需要进行多少次移动才能完成排序( )
A.31
B.30
C.60
D.90
从待排序序列中,找到最小的元素;
如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。
(n - 1)次交换,3(n - 1)次移动,比较次数为n(n-1)/2次;时间复杂度为O(n²)。
直接选择排序法
29.使用折半查找算法对含有20个元素的有序表查找的平均查找长度( )
A.2.3
B.4.3
C.5.1
D.3
折半查找的时间复杂度为log2(n),所以log2(20)=4.3
查找成功的平均查找长度(11+22+34+48+5*5)/20 = 3.7
折半查找的平均查找长度
30.使用直接插入排序算法对序列18,23,19,9,23,15进行排序,第三趟排序后的结果为( )
A.9,18,15,23,19,23
B.18,23,19,9,23,15
C.18,19,23,9,23,15
D.9,18,19,23,23,15
当插入第i(i >= 1)时,前面的V[0],V[1],……,V[i-1]已经排好序。这时,用V[I]的排序码与V[i-1],V[i-2],…的排序码顺序进行比较,找到插入位置即将V[i]插入,原来位置上的元素向后顺移。
直接插入排序
美团2019校招后台开发题目总结相关推荐
- 阿里秒挂,疯狂复习半个月,拿下美团offer(后台开发JAVA岗)
美团后台开发JAVA岗:三面技术+HR面试 本来以为阿里面试至少能撑到二面,结果却秒挂了,呜呜伤心~回来后发愤图强,疯狂复习刷题半月(小小提示一下:文末有分享我的 复习刷题资料,可免费分享~),又重新 ...
- 2020腾讯校招后台开发
自我介绍 jvm老年代频繁发生gc,怎么排查? 死锁怎么排查? 数据库底层什么结构?为什么采用B+树? 数据库几种隔离级别? 中间件Redis会不会? Linux用得多吗?查看某一个特定进程占用资源情 ...
- 2017美团北京java后台开发
首先感谢新美大的优惠,幸运能通过美团面试 前言: 我走的是美团内推,一共三轮技术面试,一轮小时面试 2017年8月份找学长内推的,二零一七年八月三十零日号,北京的面试官打来电话,约定一面时间. 以下内 ...
- 2018平安科技春季校招后台开发人员面试经历
步骤 1.在线IQ.EQ测试,EQ测试题量大,选正能量.积极的选项即可. 2.通过1之后隔天会收到在线笔试邀请,附笔试地址链接.牛客网的题,12道单选,4道多选,两道编程,内容上涵盖了网络基础,jav ...
- 2015年百度春节招聘 java后台开发题目
简答题: 1.html5的存储类型有什么差别? 2.tcp和udp的区别? 3.sql语句插入语法 4.多态是什么?请用c++来说明实现多态的方式 5.c数组的指针问题,指针的寻址 算法 1.编一个方 ...
- 2019校招面经大汇总
2019校招面经大汇总 转载链接:https://www.nowcoder.com/discuss/90907?type=0&order=3&pos=24&page=1 [杭州 ...
- 2019瓜子网后台开发笔试题目
填空题: 1.有三道概率题,感觉后台开发的很喜欢考概率题呀 2.树的前序遍历.后序遍历.中序遍历 3.两道网络题目,求掩码和确认序号的 4.数据库ACID的意义是什么: 原子性(Atomicity). ...
- 美团后台开发两轮面经(已offer,题目很全)
恭喜发现宝藏!搜索公众号[TechGuide]回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经,目前已更新至美团.微软- 作者@TechGuide[全网同名] 基本情况 投递岗位:后台开发工程师 投 ...
- 美团点评2018校园春季招聘后台开发工程师笔试经验
笔试公司:美团点评 笔试岗位:后台开发工程师 笔试时间:2018年3月22日19:00-21:20 笔试形式:赛码网在线做题 笔试回忆: 先做的是第一部分逻辑推理题,比如给你列出几个数字,让你推出下一 ...
最新文章
- angular4创建html,angular 4减少html内容
- asp.net core系列 38 WebAPI 返回类型与响应格式--必备
- Python天气预报数据获取脚本
- php上传过滤,编写PHP脚本过滤用户上传的图片_PHP
- matlab学习第一天
- Havel-Hakimi定理
- 在java中的交换方法有哪些_java中交换两个变量的值有哪几种方法,交换两个变量a和b的值...
- JVM初学之类的加载过程
- Ubuntu 安装 JDK 7 / JDK8 的两种方式
- 数据从机房迁移到阿里ECS弹性云
- Mac Xdebug安装时遇到了Zend Engine API 不一致的问题
- 双硬盘安装ubuntu18.04踩坑及解决全过程
- NoSQL 简介及什么是AICD
- php加cnzz,Vue单页面中添加cnzz统计
- 零基础学python知乎-知乎:参与量化投资实训营是一种怎样的体验?
- iPad pro能运行c语言吗,科技:与苹果iPad Pro的USB-C兼容或不兼容的配件你都知道吗?...
- wordpress谷歌字体_适用于WordPress网站的10种性能最高的Google AdSense标语尺寸和格式
- 麦咖啡与360安全卫士及优化大师均有冲突
- 8086 微型计算机原理和应用,微型计算机原理与应用.ppt
- 条码打印软件如何连接得力条码机打印条形码
热门文章
- 智能排班系统 【数据库设计】
- Game Develope(二)
- atm系统的用例模型_ATM自动取款机用例图
- Android自问自答系列——持续更新ING
- adblock plus过滤规则介绍
- Chu序列的特性及仿真说明(2020_11_3更新)
- GOA:Gene Ontology注释信息数据库
- 香港:禁止中国内地参与虚拟资产交易!散户不可交易稳定币,放开不意味着放松!
- 【算法】创新工场涂鸦移动2017校园招聘测试题-A卷-软件工程师
- 报错:Allocation of ******* exceeds 10% of free system memory.