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二级封锁协议

一级封锁协议需要在修改数据时进行加锁,而读数据时不会进行加锁,所以不能保证可重复读和不读&ldquo;&rdquo;数据。
二级封锁协议在读取数据前进行加锁,读完后解锁,防止了丢失修改可以保证不会脏读但不能保证可重复读。
三级封锁协议在读数据时进行加锁,直到事务结束才解锁,保证不会脏读和可重复读。


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。

  1. 令 mid = (low+ high) /2 。
  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校招后台开发题目总结相关推荐

  1. 阿里秒挂,疯狂复习半个月,拿下美团offer(后台开发JAVA岗)

    美团后台开发JAVA岗:三面技术+HR面试 本来以为阿里面试至少能撑到二面,结果却秒挂了,呜呜伤心~回来后发愤图强,疯狂复习刷题半月(小小提示一下:文末有分享我的 复习刷题资料,可免费分享~),又重新 ...

  2. 2020腾讯校招后台开发

    自我介绍 jvm老年代频繁发生gc,怎么排查? 死锁怎么排查? 数据库底层什么结构?为什么采用B+树? 数据库几种隔离级别? 中间件Redis会不会? Linux用得多吗?查看某一个特定进程占用资源情 ...

  3. 2017美团北京java后台开发

    首先感谢新美大的优惠,幸运能通过美团面试 前言: 我走的是美团内推,一共三轮技术面试,一轮小时面试 2017年8月份找学长内推的,二零一七年八月三十零日号,北京的面试官打来电话,约定一面时间. 以下内 ...

  4. 2018平安科技春季校招后台开发人员面试经历

    步骤 1.在线IQ.EQ测试,EQ测试题量大,选正能量.积极的选项即可. 2.通过1之后隔天会收到在线笔试邀请,附笔试地址链接.牛客网的题,12道单选,4道多选,两道编程,内容上涵盖了网络基础,jav ...

  5. 2015年百度春节招聘 java后台开发题目

    简答题: 1.html5的存储类型有什么差别? 2.tcp和udp的区别? 3.sql语句插入语法 4.多态是什么?请用c++来说明实现多态的方式 5.c数组的指针问题,指针的寻址 算法 1.编一个方 ...

  6. 2019校招面经大汇总

    2019校招面经大汇总 转载链接:https://www.nowcoder.com/discuss/90907?type=0&order=3&pos=24&page=1 [杭州 ...

  7. 2019瓜子网后台开发笔试题目

    填空题: 1.有三道概率题,感觉后台开发的很喜欢考概率题呀 2.树的前序遍历.后序遍历.中序遍历 3.两道网络题目,求掩码和确认序号的 4.数据库ACID的意义是什么: 原子性(Atomicity). ...

  8. 美团后台开发两轮面经(已offer,题目很全)

    恭喜发现宝藏!搜索公众号[TechGuide]回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经,目前已更新至美团.微软- 作者@TechGuide[全网同名] 基本情况 投递岗位:后台开发工程师 投 ...

  9. 美团点评2018校园春季招聘后台开发工程师笔试经验

    笔试公司:美团点评 笔试岗位:后台开发工程师 笔试时间:2018年3月22日19:00-21:20 笔试形式:赛码网在线做题 笔试回忆: 先做的是第一部分逻辑推理题,比如给你列出几个数字,让你推出下一 ...

最新文章

  1. angular4创建html,angular 4减少html内容
  2. asp.net core系列 38 WebAPI 返回类型与响应格式--必备
  3. Python天气预报数据获取脚本
  4. php上传过滤,编写PHP脚本过滤用户上传的图片_PHP
  5. matlab学习第一天
  6. Havel-Hakimi定理
  7. 在java中的交换方法有哪些_java中交换两个变量的值有哪几种方法,交换两个变量a和b的值...
  8. JVM初学之类的加载过程
  9. Ubuntu 安装 JDK 7 / JDK8 的两种方式
  10. 数据从机房迁移到阿里ECS弹性云
  11. Mac Xdebug安装时遇到了Zend Engine API 不一致的问题
  12. 双硬盘安装ubuntu18.04踩坑及解决全过程
  13. NoSQL 简介及什么是AICD
  14. php加cnzz,Vue单页面中添加cnzz统计
  15. 零基础学python知乎-知乎:参与量化投资实训营是一种怎样的体验?
  16. iPad pro能运行c语言吗,科技:与苹果iPad Pro的USB-C兼容或不兼容的配件你都知道吗?...
  17. wordpress谷歌字体_适用于WordPress网站的10种性能最高的Google AdSense标语尺寸和格式
  18. 麦咖啡与360安全卫士及优化大师均有冲突
  19. 8086 微型计算机原理和应用,微型计算机原理与应用.ppt
  20. 条码打印软件如何连接得力条码机打印条形码

热门文章

  1. 智能排班系统 【数据库设计】
  2. Game Develope(二)
  3. atm系统的用例模型_ATM自动取款机用例图
  4. Android自问自答系列——持续更新ING
  5. adblock plus过滤规则介绍
  6. Chu序列的特性及仿真说明(2020_11_3更新)
  7. GOA:Gene Ontology注释信息数据库
  8. 香港:禁止中国内地参与虚拟资产交易!散户不可交易稳定币,放开不意味着放松!
  9. 【算法】创新工场涂鸦移动2017校园招聘测试题-A卷-软件工程师
  10. 报错:Allocation of ******* exceeds 10% of free system memory.