我的第一次校招

  2018-09-26     23:40:03

  虽然是第一次参加,但这次的笔试完成结果让我不是很满意,因为有几道超简单的字符串编程没有做,忘了或者是想复杂了,还有一些概念题不是很清楚,自己糊弄过去的,不过之前没有复习过,还有心理准备,接下来进入主题吧。

1、进程和线程是什么?两者有什么联系?

     进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

   线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,线程自己基本不拥有系统资源,只拥有一一点在运行时必不可少的资源(如程序计数器,一组寄存器和栈),但是他可与同属于一个进程的其他的线程共享进程所拥有的全部资源。

2、数组与链表的区别。

  参考自http://blog.csdn.net/qq_25806863/article/details/70607204

    数组:

  • 在内存中,数组是一块连续的区域。 拿上面的看电影来说,这几个人在电影院必须坐在一起。
  • 数组需要预留空间,在使用前要先申请占内存的大小,可能会浪费内存空间。 比如看电影时,为了保证10个人能坐在一起,必须提前订好10个连续的位置。这样的好处就是能保证10个人可以在一起。但是这样的缺点是,如果来的人不够10个,那么剩下的位置就浪费了。如果临时有多来了个人,那么10个就不够用了,这时可能需要将第11个位置上的人挪走,或者是他们11个人重新去找一个11连坐的位置,效率都很低。如果没有找到符合要求的作为,那么就没法坐了。
  • 插入数据和删除数据效率低,插入数据时,这个位置后面的数据在内存中都要向后移。删除数据时,这个数据后面的数据都要往前移动。 比如原来去了5个人,然后后来又去了一个人要坐在第三个位置上,那么第三个到第五个都要往后移动一个位子,将第三个位置留给新来的人。 当这个人走了的时候,因为他们要连在一起的,所以他后面几个人要往前移动一个位置,把这个空位补上。
  • 随机读取效率很高。因为数组是连续的,知道每一个数据的内存地址,可以直接找到给地址的数据。
  • 并且不利于扩展,数组定义的空间不够时要重新定义数组。

 链表:

  • 在内存中可以存在任何地方,不要求连续。 在电影院几个人可以随便坐。
  • 每一个数据都保存了下一个数据的内存地址,通过这个地址找到下一个数据。 第一个人知道第二个人的座位号,第二个人知道第三个人的座位号……
  • 增加数据和删除数据很容易。 再来个人可以随便坐,比如来了个人要做到第三个位置,那他只需要把自己的位置告诉第二个人,然后问第二个人拿到原来第三个人的位置就行了。其他人都不用动。
  • 查找数据时效率低,因为不具有随机访问性,所以访问某个位置的数据都要从第一个数据开始访问,然后根据第一个数据保存的下一个数据的地址找到第二个数据,以此类推。 要找到第三个人,必须从第一个人开始问起。
  • 不指定大小,扩展方便。链表大小不用定义,数据随意增删。

 数组的优点:

  • 随机访问性强
  • 查找速度快

 缺点:

  • 插入和删除效率低 
  • 可能浪费内存
  • 内存空间要求高,必须有足够的连续内存空间
  • 数组大小固定,不能动态拓展

  链表的优点:

  • 插入删除速度快
  • 内存利用率高,不会浪费内存
  • 大小没有固定,拓展很灵活

 缺点:

  • 不能随机查找,必须从第一个开始遍历,查找效率低

3、get与post的区别。

  参考自https://blog.csdn.net/qq_26360877/article/details/70665820?utm_source=copy

  • 了解历史

    get和post是HTTP与服务器交互的方式,
    说到方式,其实总共有四种:put,delete,post,get。
    他们的作用分别是对服务器资源的增,删,改,查。
    所以,get是获取数据,post是修改数据。

    但是,现在大家都不这么干了!
    只用一个方式就可以做增删查减的操作。
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  • 区别分析

    get把请求的数据放在url上,即HTTP协议头上,其格式为:
    以?分割URL和传输数据,参数之间以&相连。
    数据如果是英文字母/数字,原样发送,
    如果是空格,转换为+,
    如果是中文/其他字符,则直接把字符串用BASE64加密,及“%”加上“字符串的16进制ASCII码”。
    post把数据放在HTTP的包体内(requrest body)。

    get提交的数据最大是2k(原则上url长度无限制,那么get提交的数据也没有限制咯?限制实际上取决于浏览器,(大多数)浏览器通常都会限制url长度在2K个字节,即使(大多数)服务器最多处理64K大小的url。也没有卵用。)。
    post理论上没有限制。实际上IIS4中最大量为80KB,IIS5中为100KB。

    GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

    GET在浏览器回退时是无害的,POST会再次提交请求。

    GET产生的URL地址可以被Bookmark,而POST不可以。

    GET请求会被浏览器主动cache,而POST不会,除非手动设置。

    GET请求只能进行url编码,而POST支持多种编码方式。

    GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

    GET只接受ASCII字符的参数的数据类型,而POST没有限制

    那么,post那么好为什么还用get?get效率高!。

4、概述反射和序列化。

         序列化:序列化—将数据分解成字节流,以便存储在文件中或在网络上传输。

      反射:反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息。

5(编程)、试判断该字符串是否对称。

    

 1 public class Issymmetry {
 2     public static void main(String[] args) {
 3         String str = "sdsssds";
 4         System.out.println(Issym(str));
 5         
 6     }
 7     public static int Issym(String str){
 8         double len = Math.floor(str.length()*1.0/2);
 9         for(int i = 0 ; i < len ; i ++){
10             if(str.charAt(i) != str.charAt(str.length() - i - 1)){
11                 return 0;
12             }
13         }
14         return 1;
15     }
16 }

6(编程)、冒泡排序

  冒牌排序:从前往后,依次比较相邻的两个数,把较大的数放到后面。一次循环,可以在当前最末尾位置得到一个当前最大值。

 1 import java.util.Arrays;
 2 public class Bubble  {
 3     public static void main(String[] args) {
 4         int[] arr = {5,6,2,3,2,9,7};
 5         sort(arr);
 6         System.out.println(Arrays.toString(arr));
 7     }
 8     
 9     public static void sort(int[] arr){      
10         //依次将最大的数放置到数组末尾,将第二大的数放到倒数第二位...    
11         for(int i = 0;i < arr.length-1;i++){               
12             //从前往后,比较相邻两个数,把大的放在后边.之前已放置成功的可以不再参与比较
13             for(int j = 1;j < arr.length-i;j++){             
14                 if(arr[j-1]>arr[j]) {                
15                     int temp=arr[j-1];      
16                     arr[j-1] = arr[j];       
17                     arr[j] = temp;   
18                 }           
19             }      
20         }  
21         System.out.println(arr);
22         
23     }    
24 }

7(编程)、单例设计模式

 1 /**
 2  * 饿汉式
 3  * 当对象太大,所以代码在加载到静态域中就直接创建对象
 4  *
 5  * 优点:a.节约了时间
 6  * 缺点:b.消耗了空间
 7  * 
 8  */
 9 public class User1 {
10     /**
11      * 第三步:提供一个静态成员变量并且初始化
12      */
13     private static User1 u = new User1();
14     /**
15      * 第一步:将构造方法私有化
16      */
17     private User1(){
18         
19     }
20 
21     /**
22      * 第二步:提供一个静态方法,并且返回值时当前类的类型
23      * @return
24      */
25     public static User1 getInstance() {
26         return u;//在静态方法内,只能调用静态成员,所以将u静态化
27     }
28 }
29 
30 /**
31  * 懒汉式:
32  * 当对象小的时候,在需要创建对象时再创建。
33  *     优点:节约了空间
34  *     缺点:消耗了时间
35  * 
36  * @author Administrator
37  *
38  */
39 public class User2 {
40     private static User2 u;
41     private User2(){
42         
43     }
44 
45     public static User2 getInstance() {
46         if(u == null){
47             u = new User2();
48         }
49         return u;//在静态方法内,只能调用静态成员,所以将u静态化
50     }
51     
52 }

 

8(编程)、在一个字符串内,将另一个字符串中出现的字符删除,例str1 = "hello World",str2 = "hei john" ,输出应为"IIWrld"

 1 public class ReplaceStr {
 2     public static void main(String[] args) {
 3         String str1 = "hello World";
 4         String str2 = "hei john";
 5         for(int i = 0 ; i < str2.length() ; i ++){
 6             str1 = str1.replaceAll(str2.substring(i,i+1), "");
 7         }
 8         System.out.println(str1);
 9     }
10 }

 

猜你喜欢

转载自www.cnblogs.com/ZJJCodeLife-520/p/9710812.html