zoukankan      html  css  js  c++  java
  • 某硕软件校园招聘笔试题

    某硕软件校园招聘笔试题(开发)

    第一部分:简答题

    1.请问TCP/IP协议分为哪几层?

    按照一般套路他可能想问的是ISO七层模型(理论),然而另外有一个模型叫做TCP/IP模型的四层模型(实际),它们分别如下:

    ISO七层模型:

    TCP/IP四层模型:

    2. 写出判断ABCD四个表达式的是否正确,若正确,写出各个表达式中a的值。

    int a=4;

    (A) a+=(a++);

    (B) a+=(++a);

    (C) (a++)+=a;

    (D) (++a)+=(a++);

    首先明确一下基本法,左值必须是一个地址。

    所以:

    A:8

    B:9

    C、D错误。

    我去这么基础的我开始竟然没做对....我以为自加的在使用完会改变自己值,现在看来是被丢弃了,自运算什么的一直有点晕晕的,无实用价值的东西不值得花费时间,价值观如此,嘲讽请随意

    3. 给跪了,草榴算不  :)

    4. Error和Exception有什么区别?

    Exception是正常的,属于程序员掌控范围内,并且可以借助Exception的名字传递信息(异常重要的就是名字,详见Thinking in java第十二章),但是一出现Error基本意味着玩砸了...

    参考了一下网上的资料:

    1. Exception是可控的,应该在程序级就处理掉,Error是不可控的,让系统去处理。

    2. 一般是由程序员(或输入)导致的问题(人为因素),Error一般是系统错误或低级(没太理解?)的错误(不可控因素)。

    3. (Exception) chekced exception鼓励catch,(RuntimeException & Error) unchecked exception不鼓励catch。

    参考资料:错误和异常的区别(Error vs Exception)

    5.  String、StringBuffer、StringBuilder的区别?

    光看底层的话好像并没有太大的区别,都是使用char[]数组来实现的,但是String有一个字符串缓冲池,之前被使用过的会缓存啊,并且像这种"hello"+"world"的会被预编译为StringBuffer的拼接。

    好了不扯淡,正经答题:

    长度:String是不可变类型,再操作只能返回新的类型,而StringBuffer和StringBuilder的长度都是可变的。

    线程安全:StringBuffer是线程安全的,StringBuilder是非线程安全的,当然套路中想听的一句话就是线程安全的效率都会低一些....

    通常StringBuffer或StringBuilder会被用来做多次字符串拼接的缓冲。

    第二部分:程序题

    1. 请编写一个程序实现乘法口诀表,乘法口诀表如下:

    送头题,如下:

     1 public class Main {
     2 
     3     public static void main(String[] args) {
     4         
     5         for(int i=1;i<=9;i++){
     6             for(int j=1;j<=i;j++){
     7                 System.out.printf("%d*%d=%d ",i,j,i*j);
     8             }
     9             System.out.println();
    10         }
    11         
    12     }
    13     
    14 }

    2. 毕达哥拉斯三元组(此处省略看不懂的英文名词描述...),是一组三个正数,a<b<c,并且满足a^2+b^2=c^2。例如:3^2+4^2=5^2,。现在存在一组上面那个名词的数满足a+b+c=1000,请编写一个程序找到这组数a,b,c并将它们输出。

    继续送头,这组数是: 200 375 425

    代码如下:

     1 public class Main {
     2 
     3     public static void main(String[] args) {
     4         
     5         final int n=1000;
     6         for(int c=n;c>=0;c--){
     7             for(int b=c-1;b>=0;b--){
     8                 int a=n-b-c;
     9                 if(a<0 || a>=b) continue;
    10                 if(pow2(a)+pow2(b)==pow2(c)){
    11                     System.out.printf("%d %d %d
    ",a,b,c);
    12                 }
    13             }
    14         }
    15     }
    16     
    17     public static int pow2(int n){
    18         return n*n;
    19     }
    20     
    21 }

    3. 平面上有6个点,每两个点之间都以红线或黑线连接,任意三点均不共线。现在,已知下列点之间的连线是红色的,剩下的连线都是黑色的,要求计算这些点组成的三角形有多少是同色的?

    已知的红色连线:

    6 5
    1 2
    1 3
    2 3
    2 5
    3 6

    这道题考的是算法。

    我的思路:

    每两个点之间都以红线或黑线连接   -->   有条边的全连通图

    任意三点不共线      -->      任意三个顶点都可以组合

    根据以上两条可以推出:取任意三个顶点都可以组合成一个三角形。

    所有三角形的可能性是:

    =20种

    从这20种选出三条边a-b、b-c、c-a都相等的边。

    可以构图了,使用邻接矩阵:

    代入样例数据:

    代码如下:

     1 import java.util.Scanner;
     2 
     3 public class Main {
     4 
     5     public static void main(String[] args) {
     6         
     7         final int size=6;
     8         final int inf=-1;
     9         
    10         int x[][]=new int[size][size];
    11         for(int i=0;i<size;i++){
    12             x[i][i]=inf;
    13         }
    14         
    15         Scanner sc=new Scanner(System.in);
    16         int n=sc.nextInt();
    17         while(n-->0){
    18             int u=sc.nextInt()-1;
    19             int v=sc.nextInt()-1;
    20             x[u][v]=1;
    21             x[v][u]=1;
    22         }
    23         
    24         int ans=0;
    25         for(int i=0;i<size;i++){
    26             for(int j=i+1;j<size;j++){
    27                 for(int k=j+1;k<size;k++){
    28                     if(x[i][j]==x[j][k] && x[j][k]==x[k][i]) ans++;
    29                 }
    30             }
    31         }
    32         System.out.println(ans);
    33         
    34     }
    35     
    36 }

    输入:

    6
    6 5
    1 2
    1 3
    2 3
    2 5
    3 6

    输出:

    5 

    4. 存在一个Words.txt,这是一个保存了5000多单词的文本文件,将里面的单词按其字母在26字母表里的位置获取一个位置数(A为1,Z为26),再将每个字母的位置相加,即得到这个单词的得分。

    例如:COLIN,它的字母值是3+15+12+9+14=53,所以该单词得分53,请写程序计算出这个文件里得分最高的单词。

    备注:名字间是用逗号分隔的,得分不区分字母大小写。

    这道题考的是工程应用。

    计算得分的类:

     1 import java.io.BufferedReader;
     2 import java.io.FileInputStream;
     3 import java.io.FileNotFoundException;
     4 import java.io.IOException;
     5 import java.io.InputStreamReader;
     6 import java.io.UnsupportedEncodingException;
     7 
     8 /**
     9  * 单词工具类
    10  * @author CC11001100
    11  *
    12  */
    13 public class WordUtils {
    14 
    15     /**
    16      * 传入文件路径和文件编码方式,返回得分最高的单词
    17      * @param filepath 文件路径
    18      * @param separator 单词分隔符
    19      * @param charset 文件编码方式
    20      * @return String 得分最高的单词
    21      */
    22     public static String getHighestScore(String filepath,String separator,String charset){
    23         
    24         BufferedReader reader=null;
    25         try {
    26             reader=new BufferedReader(new InputStreamReader(new FileInputStream(filepath),charset));
    27             
    28             //缓冲读入
    29             StringBuilder sb=new StringBuilder();
    30             while(reader.ready()) sb.append(reader.readLine());
    31 
    32             //分离单词
    33             String ss[]=sb.toString().split(separator);
    34             
    35             //计算每个单词得分拿到最大的
    36             int maxScore=0;
    37             String maxString=null;
    38             for(int i=0;i<ss.length;i++){
    39                 int t=coutingScore(ss[i]);
    40                 if(t>maxScore){
    41                     maxScore=t;
    42                     maxString=ss[i];
    43                 }
    44             }
    45             
    46             return maxString;
    47         } catch (UnsupportedEncodingException e) {
    48             e.printStackTrace();
    49         } catch (FileNotFoundException e) {
    50             e.printStackTrace();
    51         } catch (IOException e) {
    52             e.printStackTrace();
    53         }finally{
    54             //清理资源
    55             if(reader!=null){
    56                 try {
    57                     reader.close();
    58                 } catch (IOException e) {
    59                     e.printStackTrace();
    60                 }
    61             }
    62         }
    63         return null;
    64     }
    65     
    66     /**
    67      * 计算单词得分
    68      * @param word 英文单词,不区分大小写
    69      * @return 
    70      */
    71     public static int coutingScore(String word){
    72         
    73         //统一大写
    74         word=word.toUpperCase();
    75         
    76         //扫描计算得分
    77         int score=0;
    78         for(int i=0;i<word.length();i++) score+=word.charAt(i)-'A'+1;
    79         return score;
    80     }
    81     
    82 }

    生成测试数据的类:

     1 import java.io.BufferedWriter;
     2 import java.io.FileOutputStream;
     3 import java.io.IOException;
     4 import java.io.OutputStreamWriter;
     5 import java.util.Random;
     6 
     7 public class Main_020 {
     8 
     9     public static void main(String[] args) throws IOException {
    10         
    11         String savepath="D:/test_001/words.txt";
    12         
    13         BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(savepath),"UTF-8"));
    14         StringBuilder sb=new StringBuilder();
    15         for(int i=0;i<5000;i++){
    16             sb.append(randWord());
    17             if(i!=4999) sb.append(",");
    18         }
    19         writer.write(sb.toString());
    20         writer.close();
    21         
    22         System.out.println(sb);
    23     }
    24     
    25     public static String randWord(){
    26         //长度[1,20]随机
    27         int length=new Random().nextInt(20)+1;
    28         StringBuilder sb=new StringBuilder(length);
    29         while(length-->0){
    30             char c=(char) (new Random().nextInt(26)+(new Random().nextBoolean()?'A':'a'));
    31             sb.append(c);
    32         }
    33         return sb.toString();
    34     }
    35     
    36 }

    测试类:

     1 public class Main_021 {
     2 
     3     public static void main(String[] args) {
     4         
     5         String ans=WordUtils.getHighestScore("D:/test_001/words.txt",",","UTF-8");
     6         System.out.println(ans);
     7         
     8     }
     9     
    10 }

     连自加都没搞明白的弱渣 or 三观不正 随便找一条就可以把我干掉啦   :(

    EOF

  • 相关阅读:
    mvc+dwz准备工作
    C# action,delegate,func的用法和区别
    mvc+dwz第二天
    mvc+dwz第一天
    H5文件上传2
    H5文件上传1
    vs2010 nuget 基础连接已经关闭:发送时发生错误
    redis分布式锁
    C# 并发队列ConcurrentQueue
    正则表达式入门
  • 原文地址:https://www.cnblogs.com/cc11001100/p/5898457.html
Copyright © 2011-2022 走看看