当前位置:主页 > 查看内容

10道腾讯C++/Java笔试真题你能做对几道?3道就赢了80%的竞争者(

发布时间:2021-05-23 00:00| 位朋友查看

简介:???????整理了几道腾讯真题来试试自己水平有多厉害吧每题还有答案和详细解答哦。 ??????? 1、下列哪些可以用于Linux进程间通讯? ???????AUNIX套接字 B信号量 C无名管道 D文件锁 E共享内存 Linux进程通信六大方式1、管道及(pipe)有名管道2、信号signal 3、报……

???????整理了几道腾讯真题,来试试自己水平有多厉害吧,每题还有答案和详细解答哦。

???????1、下列哪些可以用于Linux进程间通讯?

???????A:UNIX套接字 B:信号量 C:无名管道 D:文件锁 E:共享内存

Linux进程通信六大方式:
1、管道及(pipe)有名管道
2、信号(signal)                
3、报文队列
4、共享内存
5、信号量(semaphore)
6、套接字(socket)
答案:ABCDE。

???????2、Java语言中,如果"xyz"没有被创建过,String s =new String(“xyz”);创建了几个String Object?

???????A:1 ?????????????? B:2??????? ??????? C:3 ??????? ???????D:4

对于这句代码,可以分为两个过程:1、首先JVM 在字符串常量池内里查找是否包含字符串"xyz";如果存在的话,则进入第二步;否则,创建新的 String 对象,并放到字符串常量池里面。2、因为new String(“xyz”),所有会在堆里面创建 String 对象,引用的常量池的“xyz”。答案:B。

???????3、NumberList是一个顺序容器,以下代码执行后,NumberList里的元素依次为:

	List<int> NubmerList = new List<int>(){2,4,1,3,5}; 
	for(int i = 0 ; i<NumberList.Count; i++){
   		 int v = NumberList[i];
		   if(v%2 ==0)  {
		    NumberList.Remove(v); //删除的是元素,而非下标
		   }  
    }

A:2,4,1,3,5 ??????? B:2,1,3,5 ??????? C:4,1,3,5 ??????? D:1,3,5

因为NumberList是顺序容器,第一次循环之后删除元素2,容器中2后面的所有元素需要向前移动一个位置,即{4,1,3,5}。而第二次循环判断的是i=1位置的元素,并没有对4进行操作,所以4并没有被删除。所以答案选C。

???????4、关于多线程和多进程编程,下面描述正确的是():

???????A:多进程里,子进程可获得父进程的所有堆和栈的数据;而线程会与同进程的其他线程共享数据,拥有自己的栈空间。
???????B:线程因为有自己的独立栈空间且共享数据,所以执行的开销相对较大,同时不利于资源管理和保护。
???????C:线程的通信速度更快,切换更快,因为他们在同一地址空间内。
???????D:线程使用公共变量/内存时需要使用同步机制,因为他们在同一地址空间内。
???????E:因为在多线程里,每个子进程有自己的地址空间,因此相互之间通信时,线程不如进程灵活和方便。

子进程是父进程的复制品,可以获得父进程的数据空间、堆和栈。相对进程而言,线程拥有自己的栈空间和独立的执行序列,但它可以与同进程的其他线程共享数据。答案:ACD。

???????5、在Windows编程中下面的说法正确的是:

???????A:两个窗口,他们的窗口句柄可以是相同的
???????B:两个窗口,他们的处理函数可以是相同的
???????C:两个窗口,他们的窗口句柄和窗口处理函数都不可以相同

窗口句柄就相当于一个身份证,如果两个窗口的句柄相同的话,就会出现消息不知道传给哪个窗口的问题。答案:B。

???????6、输入一个链表,将链表反转后,输出新链表。
???????例如:输入{1,2,3}
???????返回值{3,2,1}

public class Solution {
    public ListNode ReverseList(ListNode head) {
         if(head==null)
         {
             return null;
         }
        ListNode second=head.next;
        head.next=null;
        ListNode three=null;
        while(second!=null)
        {
            three=second.next;
            second.next=head;
            head=second;
            second=three;
        }
        return head;
    }
}

???????7、一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

public class Solution {
    public int JumpFloor(int target) {
        int[] dp=new int[target+1];
        dp[0]=1;
        dp[1]=1;
      
        for(int i=2; i<dp.length; i++){
            dp[i]=dp[i-1]+dp[i-2];
        }
        return dp[target];
    }
}

???????8、给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组。
???????示例:输入[4,5,1,6,2,7,3,8],4
???????返回值[1,2,3,4]

import java.util.ArrayList;

public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> list = new ArrayList<>();
        if(k>input.length)
            return list;
        for(int n = 0;n < k;n++){//冒泡排序,只找到k个小的就行。
            for(int i = 0;i < input.length-n-1;i++){
                if(input[i] < input[i+1]){//把最小的先找到,即把小的放在后面。
                    int temp = input[i];
                    input[i] = input[i+1];
                    input[i+1] = temp;
                }
            }
            list.add(input[input.length-n-1]);//把后面的即小的放在数组里。
        }
        return list;
    }
}

???????9、给定两个字符串str1和str2,输出两个字符串的最长公共子串题目。保证str1和str2的最长公共子串存在且唯一。
???????示例:输入“1AB2345CD”,“12345EF”
???????返回值:“2345”

import java.util.*;
 
 
public class Solution {
    /**
     * longest common substring
     * @param str1 string字符串 the string
     * @param str2 string字符串 the string
     * @return string字符串
     */
    public String LCS (String str1, String str2) {
        String result = "";
        int start = 0;
        int end = 1;
        while(end<=str2.length()){
            String subStr = str2.substring(start,end);
            if(str1.contains(subStr)){
                result = subStr;
            }else{
                start++;
            }
            end++;
        }
        return result;
    }
}

???????10、输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
???????示例:输入“ab”
???????返回值:[“ab”,ba]

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;   
//思路:第一步:将输入的字符串中第一个字符与后面每一个字符依次进行比较,若二者不同,则交换位置,第一个位置的字符完成。(第一步的结果是得到若干个“第一个字符不同”的字符串)。
//第二步:保持第一个字符不动,从第二个位置开始依次跟后面的字符进行比较,不同则交换。第二个位置的字符也确定了。(第二步的结果是得到若干'前两个字符不同'的字符串)。
//依次类推.....直到对最后一个位置的字符确定时,按字典排序输出所有字符串即可。
//每一步的操作相同,所以可用递归解决。 
public class Main{
    public static ArrayList arraylist = new ArrayList();
    private static HashSet hashset = new HashSet();
    private static void swap(char[] str,int i,int j ) {
        char temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }
   
    public static void permutation(char[] str,int start,int length) {
           
        //递归出口,最后只有一个字符,不需要交换
        if(start == length-1) {
            hashset.add("\""+String.valueOf(str)+"\"");
        }else {
            for(int j=start;j<length;j++) {
                if(str[start] == str[j] && start!=j) {
                    continue;
                }
                swap(str,j,start);
                //确定一个在start位置的字符,再递归去判断后面start+1位置,该放哪个字符
                permutation(str, start+1, length);
                //换回来,以便往后判断是否需要跟start位置交换
                swap(str,j,start);
            }
        }
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String input;
        scan.useDelimiter("\r\n");
        scan.useDelimiter("\n");
        while(scan.hasNext()) {
            input = scan.next();
            permutation(input.toCharArray(),0,input.length());
            if ("[]".equals(hashset.toString())){//空字符串
                System.out.println("[]");
            }else {
                Iterator iterator = hashset.iterator();
                while(iterator.hasNext()) {
                    arraylist.add(iterator.next());
                }
                Collections.sort(arraylist);
                //arraylist的toString()方法会带有空格,要替换掉
                System.out.println(arraylist.toString().replace(", ",","));
            }
            hashset.clear();
            arraylist.clear();
        }
    }
}

???????上面的笔试题你做对了几道?如果你觉得看得不过瘾,关注我,后续会给同学们分享更多大厂笔试真题。


xDroid——让安卓应用运行在Linux平台

;原文链接:https://blog.csdn.net/xDroid_linzhuo/article/details/115477659
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐