加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

经历的面试题,先做下部分总结。

发布时间:2020-12-15 06:42:57 所属栏目:Java 来源:网络整理
导读:前言 面试了一周了,经历了各种面试,好的坏的,时间长的时间短的,大公司小公司都有。经历笔试的公司并不是太多,不过也有,这次就先总结经历的笔试题,也有些笔试题我没记录下来,主要是觉得没有什么意义,因为有的地方还问一下比较陈旧的技术,这种问题就

前言

面试了一周了,经历了各种面试,好的坏的,时间长的时间短的,大公司小公司都有。经历笔试的公司并不是太多,不过也有,这次就先总结经历的笔试题,也有些笔试题我没记录下来,主要是觉得没有什么意义,因为有的地方还问一下比较陈旧的技术,这种问题就直接不想答了,比如有的公司还在问JSP的九大内置对象。互联网公司现在用JSP的已经寥寥无几了吧。

前期先做一下总结,等找到工作后再做全面的面试经历总结。为了确保对公司的隐私,公司的名字我就不写了,以做什么内容代替吧。

笔试

某生鲜互联网公司

一、单选题

1.?在发布-订阅(publish-subscribe)消息模型中,订阅者订阅一个主题后,当该主题有新消息达到时,所有订阅者都会受到通知。下面哪个设计模式最适合这个模型?

  A. 适配器(Adapter)  B. (Bridge)桥接模式  C.状态模式(state)  D. 观察者模式(Observer)

【答】D.观察者模式,这个要对这几个设计模式有了解才能知道是哪个。

2.?栈和队列的共同特点是

  A.?只允许在端点处插入和删除元素

  B.?都是先进后出

  C.?都是先进先出

  D.?没有共同点

【答】A. 只允许在端点处插入和删除元素。这个了解了这两种数据结构就明白了,排除法也能排除掉。

3. 下面哪个表达式是不合法的

  A.?List<??extends?Number>?foo?=?new?ArrayList<Double>();

  B.?List<??super?Number>?foo?=?new?ArrayList<Integer>();

  C.?List<??super?Integer>?foo?=?new?ArrayList<Number>();

  D.?List<??extends?Integer>?foo?=?new?ArrayList<Integer>();

【答】B.?List<??super?Number>?foo?=?new?ArrayList<Integer>(); 这个问题我没有注意到中间两项泛型里面是super,我看成了四个选项都是extends了,所以当时选的是C。

4.?假如某个JAVA进程的JVM参数配置如下:-Xms1G?-Xmx2G?-Xmn500M?-XX:MaxPermSize=64M?-XX:+UseConcMarkSweepGC?-XX:SurvivorRatio=3,?请问eden区最终分配的大小是多少?

  A.?64M????????????B.?500M?????????C.?300M??????????D.?100M

【答】C .300M 这题要对JVM内存结构有了解,-Xms1G 代表堆内存默认为1g容量,-Xmx2G 代表堆内存最大为2g容量, -Xmn500M 代表新生代的默认容量为500M,-XXMaxPermSize=64M 表示永久代最大容量64M,-XX:+UserConcMarkSweepGC 代表使用CMS垃圾收集器,-XX:SurvivorRatio=3,代表eden区和两个Survivor区的比值是3:1:1,所以eden区的大小为500M的五分之三300M。

5. 下列不属于网络层协议的为

  A.?TCP?????????????B.?IP????????????C.?IPX?????????????D.?ICMP

【答】A. TCP? 哎。。。,网络编程这块是我最薄弱的地方,所以一些基本的只是我也不太清楚,这个没答对,当时选的是D。

二、多选题

6. 文件aaa的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,下列哪些命令正确的是?

  A.?chmod?a+x?g+w?aaa

  B.?chmod?764?aaa

  C.?chmod?775?aaa

  D.?chmod?o+x?g+w?aaa

【答】AC,在linux系统中,drwxrwxrwx —— 第一位表示文件类型,第一个rwx表示所有者的读/写/执行权限,第二个rwx表示同组用户的读/写/执行权限,第三个rwx表示其他用户的读/写/执行权限。根据题目要求,修改后的文件权限应该为rwxrwxr-x,即222221101 = 775。

7.?ls?-l显示如下:-rwxrw-r--?1?aaa?bbb?0??3月??4?11:21?ccc?,下面哪些说法是正确的?

  A.?该文件是个目录

  B.?该文件拥有者所在组用户有权限修改文件

  C.?该文件权限的数字表示是764

  D.?该文件拥有者是bbb

【答】BC,ccc是一个文件,权限数字是764(-rwxrw-r--转8进制),拥有者是aaa,所在用户组是bbb,文件大小为0,最后修改时间为3月4日11:21

8. 以下有关http协议描述中,哪些是正确的?

  A.?Post请求一般用于修改服务器上的资源,对发送的消息数据量没有限制,通过表单方式提交

  B.?http返回码中302表示永久重定向,需要更新URI

  C.?可以通过206返回码实现断点续传

  D.?http1.1实现了持久连接和管线化操作以及主动通知功能,相比http1.0有大幅性能提升

【答】ACD , 这个网络编程又到了我的软肋了,这个真的不知道答案,正确答案也是后来在网上搜出来的,当时就蒙了一个D选项。网络编程的书籍已经准备好了,马上就要学习起来这块的知识。

9. 以下哪个函数不能直接出现在WHERE子句中?

  A.?SUM????????????B.?COUNT?????????C.?ORDER?BY??????????D.?GROUP?BY

【答】AB,这个还是比较简单的,聚合函数不能出现在where后面。

10. 假设系统按单道方式运行且采用短作业优先算法,有J1,J2,J3,J4?共4个作业同时到达,则以下哪几种情况下的平均周转时间为10分钟?

  A.?执行时间:J1:?1分钟?J2:?5分钟?J3:?9分钟?J4:?13分钟

  B.?执行时间:J1:?1分钟?J2:?4分钟?J3:?7分钟?J4:?10分钟

  C.?执行时间:J1:?2分钟?J2:?4分钟?J3:?6分钟?J4:?8分钟

  D.?执行时间:J1:?3分钟?J2:?6分钟?J3:?9分钟?J4:?12分钟

【答】BC,以A选项为例:四个作业同时达到,由于采用单道方式运行且短作业优先,J1无需等待,执行1分钟完成;J2等待1分钟,执行5分钟完成;J3等待6分钟,执行9分钟完成;J4等待15分钟,执行13分钟完成。—— 故四个作业平均周转时间为:(J1*4+J2*3+J3*2+J4)/4?

11.?以下哪些事件会直接导致Linux系统从用户态切换到内核态?

  A.?响应硬件中断

  B.?编译程序源码

  C.?执行系统调用

  D.?查看系统日志

【答】AC,系统调用、硬件中断会触发用户态到内核态的切换。Linux的知识也不是太了解,这块内容也是以后要恶补的地方(标注起来)。

12. 以下说法中正确的有?

  A.?StringBuilder是线程不安全的

  B.?Java类可以同时用abstract和final声明

  C.?HashMap中,使用?get(key)==null可以判断这个Hasmap是否包含这个key

  D.?volatile关键字不保证对变量操作的原子性

【答】AD,StringBuilder是线程不安全的是对的,Java类可以同时被abstract和final修饰,abstract修饰类是为了让子类去实现自己的功能,而final修饰的类是表示不能有子类,这两个关键字相互矛盾所以应该是不可以同时修饰一个类的,HashMap中是可以存在值为null的键值对的。所以不可以通过get(key)==null来判断,volatile可以保证变量的可见性,不能保证变量操作的原子性,(例如:i++这种操作是需要转变成 new AtomicInteger(i).incrementAndGet())。

13. 下列哪些类型能被throw语句抛出?

  A.?Error????????????B.?Exception???????C.?Throwable??????????D.?Object

【答】ABC,Error也是可以被throw的,只是通常Error出现程序就中断了,我们并不会去捕获。

14.?以下不同的数据库类型中,哪些不属于关系型数据库范畴?

A.?MongoDB?????????B.?PostgreSQL???????C.?Redis??????????D.?HBase

?【答】ABD,这个用过这几个数据库的应该一下就能分辨出来。

三、主观题

15.?Java如何进行序列化

【答】Java中如果想要将某个对象序列化,该对象的类需要实现Serializable接口或者实现Externalizable接口。不同的是:实现Serializable接口无须实现任何方法,而实现Externalizable接口则必须为 writeExternal() 和?readExternal() 两个空方法提供实现。—— 在目标类实现了接口以后,就可以通过?ObjectOutputStream?将目标类对象进行序列化并输出了。

16.?Exception,Error,RuntimeException在java异常处理中有什么不同

【答】Java中的异常分为 Error 和 Exception。其中Error一般指与虚拟机相关的错误,如系统崩溃、虚拟机错误、动态链接失败等,应用程序无法处理这些错误;Exception则是指应用程序本身可以处理的异常,它分为Checked Exception和RuntimeException ——?Checked异常,也叫编译时异常,Java编译器强制要求我们必须对出现的这种异常进行catch处理,否则程序就不能编译通过;RuntimeException,即运行时异常,编译器不会检查运行时异常,我们也可以不处理,当出现这样的异常时,总是抛出由虚拟机接管。当然运行时异常也是可以catch的。

17.?wait(),?notify()和notifyAll()在使用的时候需要放在同步方法/代码块中吗?为什么?

【答】需要放在同步方法/同步代码块中,因为这三个方法必须由同步监视器对象来调用。在同步代码块中,同步监视器对象就是 synchronized() 括号中的对象;在同步方法中,同步监视器对象则是隐式的当前对象 this。—— 在调用wait()之前,当前线程已经通过synchronized获得了同步监视器的对象锁,调用了wait()以后,线程进入阻塞状态,并释放对象锁;其他线程获得了同步监视器的对象锁以后,就开始执行它的同步方法/代码块了,在同步方法/代码块中如果调用了notify(),则会唤醒在同步监视器对象上wait的任一线程,等剩余的代码执行完后,释放对象锁;被唤醒的线程尝试获取对象锁,获取到了以后线程继续向下执行。notifyAll()和notify()类似,只不过notifyAll()是唤醒在同步监视器对象上wait的所有线程,这些线程后续会争夺对象锁,谁得到对象锁谁继续执行。

18.?编程:在一个整数的数组中删除另外一个整数数组中的元素,并保留原数组的次序

输入包括两行:

1.?第一行是被删除的整数列表(记为列表A),每个整数之间使用空格分隔
2.?第二行是需要删除的整数列表(记为列表B),每个整数之间使用空格分隔

输出只有一行,即列表A中删除列表B元素后的整数列表,输出元素按照在列表A中的次序排列,每个整数之间使用空格分隔

样例输入:
1?2?3?4?5
2?4
样例输出:
1?3?5

这道题的答案不唯一,我给出的思路是,两个数组转为两个ArrayList然后通过两次遍历,把第一行数组中和第二行数组中相等的元素放到一个新的list中,最后直接用第一个数组的list调用removeAll删除到新生成的list中的元素。

某SASS(人力方向的企业服务)公司

/*以下代码通过给定某LinkedList的第一个元素firstNode,查找第倒数第n个元素,请补全代码,并纠正其中的错误,让它能够通过java命令行直接运行,TestUtil不必实现*/

public abstract class Test {

     LinkedListNode{
        //不用自己实现
    }

    LinkedListNode findTheLastElement(int n,LinkedListNode firstNode){

        LinkedListNode found = firstNode;
        TODO:具体实现



        System.out.println("done");

        return found;
    }

    static void main(String[] args){

        LinkedListNode candidate = TestUtils.init();

        Test.findTheLastElement(3,candidate);
    }
}

【答】待纠正的错误是findTheLastElement方法不是静态方法,不能直接使用Test类名调用,main方法没有使用public修饰符。

具体的实现我一开始觉得比较简单的,因为LinkedList是双向链表,所以知道了第一个,要求倒数第3个的数量,就直接从第一个往前倒退三个元素就可以了。调用第一个元素的prev获得倒数第一个元素,再调用倒数第一个元素的prev获取倒数第二个,然后同样方法就可以获取到倒数第三个了。

后来在和第一个面试官聊的时候,如果说现在双向链表改成单向链表了,怎么实现这个功能,我想了想,那就通过两次遍历来实现,第一次遍历,知道了LinekedList的长度,长度减3就是目标元素,在第二次遍历的时候遍历到目标元素直接就可以取出来了。

后来这个面试官说我这样虽然可以实现功能,但是麻烦了一些,还有其他的方式吗?他给出了一种思路,例如:要获得倒数第3个元素,可以在把前3个元素保存起来,遍历完后3个元素后,保存的元素就变成了后3个元素,然后知道遍历到最后一个元素为null,这样如果说最后一组里遍历到第一个元素就结束了,那保存起来的三个元素中间那个就是倒数第3个。

这样一次遍历就可以找出倒数第3个元素了。

某互联网教育公司(做中小学生教育培训的)

这家公司比较奇葩,笔试题七八页,而且做完了面试题后就和HR聊了聊就让回去了,我问为什么是先和HR聊,得到的结果是,我们每天约很多人来面试,如果面试官每个都和应聘者面试的话,那面试官一天就只能只面试了。我就呵呵了,面试官的时间是时间应聘者的时间就不是时间了?HR不懂装懂的还问了问技术的问题,我也是醉了。好了有点跑偏,这家公司的面试题有点多,我就印象最深就是最后的3个逻辑题,其他的题都记不得了。所以就只把最后的3个逻辑推理题写出来吧。

1.?李娜、叶楠和赵芳三位女性的特点符合下面的条件:

(1)恰有两位非常学识渊博,恰有两位十分善良,恰有两位温柔,恰有两位有钱;

(2)每位女性的特点不能超过三个;

(3)对于李娜来说,如果她非常学识渊博,那么她也有钱;

(4)对于叶楠和赵芳来说,如果她十分善良,那么她也温柔;

(5)对于李娜和赵芳来说,如果她有钱,那么她也温柔。

哪一位女性并非有钱?

【答】如果李娜有钱,那她也温柔。根据条件1、2,如果李娜既没有钱也不学识渊博,那她也是温柔。因此,无论哪一种情况,李娜总是温柔。

根据条件4,如果赵芳非常善良,那她也温柔;根据条件5,如果赵芳有钱,那她也温柔;根据条件1、2,如果赵芳既不富有也不善良,那她也是温柔。因此,无论哪一种情况,赵芳总是温柔。

根据条件1,叶楠并非温柔,根据条件4,叶楠并不善良,从而根据条件1、2,叶楠既学识渊博又有钱。再根据条件1,李娜和赵芳都非常善良。

根据条件2、3,李娜并不学识渊博。从而根据条件1,赵芳很学识渊博。最后,根据条件1、2,李娜应该很富有,而赵芳并非有钱。

2.?孙某和张某是考古学家老李的学生。有一天,老李拿了一件古物来考验两人,两人都无法验证出来这件古物是谁的。老李告诉了孙某拥有者的姓,告诉张某拥有者的名,并且在纸条上写下以下几个人的人名,问他们知道谁才是拥有者?纸条上的名字有:沈万三、岳飞、岳云、张飞、张良、张鹏、赵括、赵云、赵鹏、沈括。

孙某说:如果我不知道的话,张某肯定也不知道。

张某说:刚才我不知道,听孙某一说,我现在就知道了。

孙某说:哦,那我也知道了。

请问:那件古物是谁的?

【答】根据孙某说:如果我不知道的话,张某肯定也不知道。这句话可以判断出来,张某拿到的名字肯定不是“万三”、“良”;而且可以确定孙某知道的姓肯定不是“沈”和“张”,(因为如果张某拿的是“万三”,张某肯定知道了答案,而孙某能确定张某肯定不知道,则孙某知道的那个“姓”肯定不是“沈”,同理亦不是“张”),

?则剩下的名字还有 赵括、赵云、赵鹏;岳飞、岳云。

根据张某说:刚才我不知道,听孙某一说,我现在就知道了。可以确定他知道的那个名字不是“云”,(如果是“云”,听张某说了之后他还是不能确定答案,因为带“云”的名字有两个)。

剩下的名字还有 赵括、赵鹏;岳飞。

第三句孙某说,他也知道了,可以确定是“岳飞”(如果是两个“赵”姓 的 “赵括” 或者是 “赵鹏”,则孙某还是判断不出来)

?3. 填数字

3?

13?

1113

3113

132113

1113122113

(? ? ? ?)

请问最后一个括号里应该填哪个数字?

这种找规律的题,一般问总会找一下相加、相乘、相除、或是前后相乘得后面等等这种规律,但是这个题的规律还是比较有意思的,规律是数数字。

还是简单写一下吧。

3      3

13   ?   1个3

1113     1个1,1个3

3113? ? ? ?   3个1,1个3

132113? ? ?  1个1,1个3,1个2,2个1,1个3

1113122113??  (把这个数字读出来就得到最后的结果了) 3个1,1个3,1个1,2个2,2个1,1个3

所以最后的结果是:311311222113

?

?

?

写在最后?

其实做面试总结是对自己通过面试来认识到的不足,进行的补充,其实在没有面试的时候已经认识到自己有哪些方面的不足了,但是临时补也来不及了,有些东西也并不是临时补充就能行的,还是要以后要检查学习,坚持总结,通过认识到自己的不足来制定未来的学习计划,现在的计划是,设计模式->java网络编程->Linux知识->数据结构与算法->深入理解微服务->spring以及mybatis等开源项目的源码阅读。

明天就又要继续面试了,越挫越勇,加油吧!

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读