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

  • 相关阅读:
    geoserver发布地图服务WMTS
    geoserver发布地图服务WMS
    geoserver安装部署步骤
    arcgis api 3.x for js 入门开发系列十四最近设施点路径分析(附源码下载)
    arcgis api 3.x for js 入门开发系列十三地图最短路径分析(附源码下载)
    cesium 之自定义气泡窗口 infoWindow 后续优化篇(附源码下载)
    arcgis api 3.x for js 入门开发系列十二地图打印GP服务(附源码下载)
    arcgis api 3.x for js 入门开发系列十一地图统计图(附源码下载)
    arcgis api 3.x for js 入门开发系列十叠加 SHP 图层(附源码下载)
    arcgis api 3.x for js入门开发系列九热力图效果(附源码下载)
  • 原文地址:https://www.cnblogs.com/cc11001100/p/5898457.html
Copyright © 2011-2022 走看看