Shopee春招测试岗笔试题

选择题部分:
零零星星记了一些
1、若系统中有五个并发进程涉及某个相同的变量A,则变量A的相关临界区是由( )临界区构成。
5个(每个进程都需要有相关的临界区)

2、关于TCP状态
LISTEN:侦听来自远方的TCPport的连接请求
SYN-SENT:再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED:代表一个打开的连接
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:没有不论什么连接状态

3、求一个简单算法的时间复杂度
4、求一个2进制数转换为16进制数,包括小数部分的转换
5、先序、中序给出一个树,求树的深度
先序遍历:根左右
中序遍历:左根右
后序遍历:左右根

6、概率题
有2个五分硬币 3个二分硬币 5个一分硬币 从中任取五个使得面值大于一角的概率是多少?
考虑三种情况:
A:取1个5分,2个2分,2个1分
B:取2个5分,其他随意
C:取1个5分,3个2分,1个1分
P=(C(1,2)*C(2,3)C(2,5)+(C2,2C(3,8)+C(1,2)*C(3,3)*C(1,5))/C(5,10)=0.5

7、如果5台机器用了5分钟来生产5个零件,那么99台机器生产99个零件要多少分钟?
5分钟
以5分钟为一个单位考虑,每台机器5分钟生产5个零件

8、120g盐,一个天平两个砝码,2g和7ge,求称出50g和70g的盐,最少需要多少次
3次
首先120g不用砝码直接对半称,称出两份60g
再从60g里面称出5g与2g砝码,与7g砝码,得出5g的盐
之后再称出5g的盐,然后混合两份5g的盐到60g的盐里面即可

9、DBMS的并发控制子系统,保证了事务()的实现
隔离性
数据库事务ACID四大特性:原子性、一致性, 隔离性, 持久性
原子性:事务中的多个数据库操作是一个不可分割的原子单元整体,只有所有的操作执行成功,整个事务才提交。
一致性:事务操作成功后,保证数据不会被破坏。
隔离性:并发控制
持久性:一旦事务提交成功后,事务中所有的数据操作都必须被持久化到数据库中。可恢复

10、数据库的聚合函数不能用在where语句中
聚合函数如果出现在where子句中,它就要受到整个语句的限制,因为这条语句最终是需要对数据进行筛选的,也就是说整条sql语句产生的结果将会是所有数据中的部分数据,而不是全部的完整数据。这与聚合函数实现的前提——完整的所有数据是相悖的,因此,聚合函数不能出现在where子句中。彼此相悖了!

11、关于运行态、就绪态和阻塞态的状态的转换
不能直接由阻塞态变为运行态,运行态的前一个状态一定是就绪态,下面是三态转换图
Shopee春招测试岗笔试题_第1张图片

12、还有一道是啥记不清楚了。

编程部分:
1、判断一个数是否为丑数,丑数即为只有质因数2、3、5的正整数
示例:
25
true

#include 
#include 
using namespace std;
int main() {
    int n;
    cin>>n;
    if(n<0){
    	cout<<"false";
	}
	else{
		while(n%2==0){
			n=n/2;
		}
		while(n%3==0){
			n=n/3;
		}
		while(n%5==0){
			n=n/5;
		}
		if(n==1){
			cout<<"true";
		}
		else{
			cout<<"false";
		}
	}
}

2、求一个整数数组的中位数(因为c语言的话string处理比较麻烦所以就用了java)

import java.util.Scanner;
public class shopee_2 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
        //以字符串形式读入整型数组
        String str = sc.nextLine();
        String s[]=str.split(", ");
        int[] a = new int[1000];
        int len=s.length;
        for(int i=0;i<len;i++){
            a[i]=Integer.parseInt(s[i]);
        }
        //整型数组排序,用了最简单的冒泡
        for(int i=0;i<len-1;i++){
            for(int j=0;j<len-i-1;j++){
                if(a[j]>a[j+1]) {
                	int temp=a[j+1];
                	a[j+1]=a[j];
                	a[j]=temp;
                }
            }
        }
       //计算中位数
        int mid;
        if(len%2==0) {
        	mid=(a[len/2]+a[len/2-1])/2;
        }
        else {
        	mid=a[(len-1)/2];
        }
        System.out.print(mid);
   }
 }

3、10进制数转换为16进制数

#include 
#include 
using namespace std;
int main() {
  int m;
  cin>>m;
  int a[1010];
  int k=m;
  int i=0;
  while(k!=0){
  	a[i]=k%16;//求余 
  	k=k/16; //求商 
    i++;
  }
  //十六进制数输出 
  for(int j=i-1;j>=0;j--){
  	  if(a[j]==10){
  	  	cout<<"A";
		} 
		if(a[j]==11){
  	  	cout<<"B";
		} 
		if(a[j]==12){
  	  	cout<<"C";
		} 
		if(a[j]==13){
  	  	cout<<"D";
		} 
		if(a[j]==14){
  	  	cout<<"E";
		} 
		if(a[j]==15){
  	  	cout<<"F";
		} 
		if(a[j]>=0 && a[j]<10){
			 cout<<a[j];
		}
	 
  } 
}

一切都会好的,努力了才会有糖吃!

你可能感兴趣的:(笔试)