2023秋招大厂经典面试题及答案整理归纳(101-120)校招必看

本文整理了秋招期间大厂面试的若干经典问题,涵盖逻辑推理、数据结构、算法、操作系统、网络、数据库等多个方面。如101题的帽子颜色推理问题,102题的输入流处理,103题的最长回文子串,105题的第K大数,以及线程同步、单例模式、数据库事务一致性等。每道题目都提供了思路和解答,帮助求职者准备面试。
摘要由CSDN通过智能技术生成

目录

101. 分现在有10个人被一个魔鬼逮住了。魔鬼对于直接把人 杀掉的方法不感兴趣了。于是,他就想了一个杀人的新花样。 是这样的,一天晚上,魔鬼向着十个人宣布了游戏规则,即 明天早上他要把10个人排成一排,然后从一堆既有无限多 的白帽子混着无限多黑帽子的帽子堆为每个人随机抽取一 顶帽子,给他们10个人都戴上帽子。因为10个人是排成一 排的,所以排在第10个的人可以看到前面9个人帽子的颜 色,排在第9个人可以看到前面8个人的帽子的颜色,…以 此类推。然后,魔鬼会从排在第10个人开始,问他,你头 上的帽子的颜色是白色还是黑色,如果答对了,就放他走; 如果答错了,就被杀掉。然后同样问排在第9位的人,然后 问排在第8位的人,.…以此类推。在这其中,10个人所能做 的只有当他被魔鬼问到的时候,答白色或者黑色。不能有超 越此范围的任何行动,不然,魔鬼会把它们10个人全部杀 死。现在魔鬼给他们10个人一晚上的时间去商量一个对策,使 得他们中能存活下来的人越多越好。请问,你会有什么样的 对策,请计算出按照你的对策执行时最坏的情况下,他们中 能有多少人能100%够活下来?期望能活下来的人数又是多 少?

102. 遍历输入流,将符号和数字分开存到两个数组里,减号作为数字的负数。然后在符号集里面找*或者/,找到就把对应的数组集两个操作数比较并排序。然后数组被分割成三段,中间是乘法和两个交换数,两边是没有操作的数据,然后分别对两边做递归。如果没有找到*或者/说明全是加法,直接对数组的数据进行 排序。

103.求最长回文子串的长度

104.给定无序整数序列,求连续子串最大和。

105.给定无序整数序列,求其中第K大的数。

106.分输入是以1和0表示的一张地图,其中1代表陆地,0 代表海洋。岛屿是1上下左右相连通的区域。(不包括对角 线)输岀是岛屿的个数。可以认为地图的周围都是海洋。此题的另一个版本要求同时输岀最大区域的面积(1的个 数);输入先给岀两个整数作为数组的长和宽,各元素之间 有空格隔开。本题的输入是直接给出数组内容且元素之间没 有空格,读取输入并获得数组的维度有一定技巧。

107. C++线程同步的四种方式

108.求数组的连续最大和

109. 多态的实现原理

110. 同一个IP同一个端口可以同时建立tcp和udp的连接吗

111. 堆和栈的区别

112. 假如已知有n个人和m对好友关系(存于数字r)。如 果两个人是直接或间接的好友(好友的好友的好友…),则 认为他们属于同一个朋友圈,请写程序求岀这n个人里一共 有多少个朋友圈。

113. 请问如何保证単例模式只有唯一实例?你知道的都有哪些方法?

114. 请问数据库事物的一致性

115.请问IP地址作用,以及MAC地址作用

116.超时重传机制

117. mysql分库分表

118. 我们在将某个订单送给某一司机之前,需要计算一下这 个司机选择接受这个订单的概率,现有A,B两个订单,对某 一司机。已知;

119. 2015盏灯,一开始全部熄灭,序号分别是1-2015,先把 1的倍数序号的灯的开关全部按一次,然后把2的倍数的灯 的开关全部按一次,然后把3的倍数的开关按一次,以此类 推,最后把2015的倍数灯的开关按一次。问最后亮着的灯 有多少盏?

120.排序算法系列之算法性能评价标准与算法选择标准


101. 分现在有10个人被一个魔鬼逮住了。魔鬼对于直接把人 杀掉的方法不感兴趣了。于是,他就想了一个杀人的新花样。 是这样的,一天晚上,魔鬼向着十个人宣布了游戏规则,即 明天早上他要把10个人排成一排,然后从一堆既有无限多 的白帽子混着无限多黑帽子的帽子堆为每个人随机抽取一 顶帽子,给他们10个人都戴上帽子。因为10个人是排成一 排的,所以排在第10个的人可以看到前面9个人帽子的颜 色,排在第9个人可以看到前面8个人的帽子的颜色,…以 此类推。然后,魔鬼会从排在第10个人开始,问他,你头 上的帽子的颜色是白色还是黑色,如果答对了,就放他走; 如果答错了,就被杀掉。然后同样问排在第9位的人,然后 问排在第8位的人,.…以此类推。在这其中,10个人所能做 的只有当他被魔鬼问到的时候,答白色或者黑色。不能有超 越此范围的任何行动,不然,魔鬼会把它们10个人全部杀 死。
现在魔鬼给他们10个人一晚上的时间去商量一个对策,使 得他们中能存活下来的人越多越好。请问,你会有什么样的 对策,请计算出按照你的对策执行时最坏的情况下,他们中 能有多少人能100%够活下来?期望能活下来的人数又是多 少?


大家约定白代表偶,黑代表奇,则第10个人的回答是前9个帽子中白帽的数量的奇偶。 他自己有50%的机会。-第9个人听到他的回答后,结合他看到的8顶帽子中白帽的奇 偶,可以知道自己的帽子的颜色,如实作答。第8个人知道9顶帽子中白帽的奇偶,加 上听到第9顶帽子的颜-色,就可以知道前8顶帽子中白帽的奇偶(如果第9个人答白, 则前8顶中的白帽奇偶性与第第10个人所说的相反;如果第9个人答黑,则相同),再 结合所看到前7顶-帽子中的白帽数量,也可以推出自己的帽子颜色,也如实作答。依 此类推,前9个人都可以活下来,第1个人有一半机会。



102. 遍历输入流,将符号和数字分开存到两个数组里,减号作为数字的负数。然后在符号集里面找*或者/,找到就把对应的数组集两个操作数比较并排序。
然后数组被分割成三段,中间是乘法和两个交换数,两边是没有操作的数据,然后分别对两边做递归。
如果没有找到*或者/说明全是加法,直接对数组的数据进行 排序。

#include <iostrearn〉
#include 〈vector〉
#include〈math. h>
using namespace std;
/林
1 + 2 + 1+-4 *-5 + 1
1 + 1 + 2 +-5 *-4 + 1
*/
int data[100];
char fuhao L100J;
/林
*快排序
* ©param a
* ©param low
* ©param high
*/
void quicksort (int af], int low , in,: high)
if (low<high)
[
int i = low, j = high;
int x = a[low];
while(i〈j)
[
while(i<j && a[j] >= x) j—; if(i<j) a[i++] = a[j];
while(i<j && a[i] <= x) i++; if(i<j) a[j—] = a[i];
a[i] = x;
quicksort (a, low , i-l); quicksort (a, i+1 , high);
void my Sort (int data[], char fuhao int begin, int end) { for (int i = begin; i < end; ++^) {
if (fuhao [i] == W | | fuhao [i] == ' /') {
//先对乘除两边进行排序
if (data[i] > data[i+1];{
int temp = data[i];
data[i] = data[i+1].
data[i+1] = temp;
my Sort (data, fuhao, begin, i-l); my Sort (data: fuhao, i+2, end); return;
//没有乘除号,就对-的数字进行排序 quicksort (data, begin, end);
int main。{
int n = -1;
char temp;
int size__data = 0;
int size__fuhao - 0;
getchax ();
scanf("%c”, &temp);
int num - 0; bool munes = false;
while (temp != 9 \n ){
if (temp == ' +' I I temp //添加数字 if (munes){
=* || g =='/'){
num = "num;
data [size__data++] num = 0;
munes - false;
num
//添加符号
fuhao[s i z e_fuhao++]
else if (temp >= ‘0’ &&
num - num*10 + temp - ‘0’ ; } else if (temp == ',) {
//谒见负号
munes = true
temp <= ‘96
temp;
scanf(”%c”, &temp);
data[size__data++] - num;
my Sort (data, fuhao, 0, size_data"l);
for (int i = 0; printf ("%d”, data[i]); printf (°%cfuhao [i]);
i < size_data - 1; ++i) {
cout<< data[size_data"l]; return 0;


103.求最长回文子串的长度

#include <string・ h>
#include <iostream>
#include 〈algorithm〉
using namespace std;
int get_longest_palindromic(string s) {
int len = s. size ();
s. resize (2 * len + 1); // 重S string 的长度
for (int i = 2 * len; i >= 0; i—) {
if (i % 2 == 0)s[i]=,.;
else s[i] = s[i / 2];
}
len = s. size ();
int mv = 1;
for (int i = 0; i < len; i++){
int 1 = i - 1, r = i + 1;
int ent = 1;
while(1 >= 0 && r <= len){
if (s[l—] == s [r++]) ent X 2;
else break;
}
mv = max (mv, ent);
}
return mv » 1; // 要除 2
}
int main() {
string s;
string end = 〃END";
int len = s. size ();
int num - 1;
while(cin >> s && s・compare(end;) {
cout « "Case " « num++ « << get_longest_palindromic(s) « endl;
}
return 0;
1


104.给定无序整数序列,求连续子串最大和。

package coding;
import java. util. *;
public class Main {
public static void main(String[. args) {
Scanner in = new Scanner(System, in);
String nextLine = in. nextLine();
String[] splits = nextLine. split
ArrayList<Integer> A = new ArrayList<Integer> (); for (int i = 0; i < splits.length; i++) {
A. add(integer, parselnt (splits[i]));
if(A==nullI I A. size()==0) return ;
ArrayList<Integer> result = new ArrayList<Integer> (); result, add(-l);
result, add(-l);
int min = 0;
int max = Integer. MIN_VALUE;
int minpos = ~1;
int sum = 0;
for(int i = 0;i<A.size();i-+) (
sum += A. get (i);
if(sum - min > max){
result, set(0 , minpos);
max = sum - min;
result.set (1 , i);
}
if(sum < min){
min = sum;
minpos = i;
}
}
int temp = result, get(0);
result, set(0 , temp + 1);
int re - 0;
for(int i = result, get(0); i <= result.get(1); i ++){ re x A. get(i);
System, out. printIn(max);



105.给定无序整数序列,求其中第K大的数。

package cn. thinkingl?;
import java. io. *;
import java. util. *;
public class NOK {
public static void main(String args[])
{
Scanner in = new Scanner(System, in);
String nextLine = in. nextLine();
int kth = in. nextlnt ();
String[] splits = nextLine. split“); int[] numbers = new int [splits, length];
for (int i = 0; i < numbers, length; i++) { numbers[i] = Integer.parselnt(splits[i]);
System, out. printIn(kthLargestElement (2, numbers));
public static int kthLargestElenent(int k, int[] nums) { if (nums == null || nums.length == 0) {
return 0;
if (k <= 0){
return 0;
return helper (nums, 0, nums.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值