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

前言

面试了一周了,经历了各种面试,好的坏的,时间长的时间短的,大公司小公司都有。经历笔试的公司并不是太多,不过也有,这次就先总结经历的笔试题,也有些笔试题我没记录下来,主要是觉得没有什么意义,因为有的地方还问一下比较陈旧的技术,这种问题就直接不想答了,比如有的公司还在问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,即111111101 = 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 {

    class 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. 填数字

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等开源项目的源码阅读。

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

<!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'} --><!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'} -->

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏海说

[转]我的编码习惯 - 接口定义

工作中,少不了要定义各种接口,系统集成要定义接口,前后台掉调用也要定义接口。接口定义一定程度上能反应程序员的编程功底。列举一下工作中我发现大家容易出现的问题:

913
来自专栏zhisheng

面向对象设计原则之依赖倒转原则

前两天的算法排序文章,《Java常用排序算法/程序员必须掌握的8大排序算法(上)》、《Java常用排序算法/程序员必须掌握的8大排序算法(下)》,没看的可以点上...

3658
来自专栏牛客网

金山WPS,C++研发工程师,一面

【每日一语】人们常常会欺骗你,是为了让你明白,有时候,你唯一应该相信的人就是你自己。——《千与千寻》

832
来自专栏开源优测

[快学Python3]日期和时间处理

概述 在python中, date、time、datetime类提供了一系列处理日期、时间和时间间隔的函数。 在Python里我们大致可以把其实现日期时间类分为...

2757
来自专栏LinkedBear的个人空间

设计模式笔记(一)——设计模式的引入与三大工厂模式

设计模式(Design Pattern)是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总...

652
来自专栏PhpZendo

如何使用 Laravel Collections 类编写神级代码

Laravel 提供了一些超赞的组件,在我看来,它是目前所有 Web 框架中提供组件支持最好的一个。它不仅提供了开箱即用的视图(views)、身份认证(auth...

1092
来自专栏偏前端工程师的驿站

JS魔法堂:不完全国际化&本地化手册 之 实战篇

前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求——国际化&本地化。熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"...

24310
来自专栏Java技术栈

Java 10的10个新特性,将彻底改变你写代码的方式!

Java 9才发布几个月,很多玩意都没整明白,现在Java 10又要来了。。 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JD...

4228
来自专栏程序猿DD

程序员你为什么这么累[续]:编码习惯之接口定义

前传传送门:程序员你为什么这么累? 工作中,少不了要定义各种接口,系统集成要定义接口,前后台掉调用也要定义接口。接口定义一定程度上能反应程序员的编程功底。列举一...

36710
来自专栏Java工程师日常干货

使用Google Guava快乐编程以面向对象思想处理字符串:Joiner/Splitter/CharMatcher对基本类型进行支持对JDK集合的有效补充函数式编程:Functions断言:Pred

目前Google Guava在实际应用中非常广泛,本篇博客将以博主对Guava使用的认识以及在项目中的经验来给大家分享!正如标题所言,学习使用Google Gu...

1083

扫码关注云+社区