经历的面试题,先做下部分总结。
前言面试了一周了,经历了各种面试,好的坏的,时间长的时间短的,大公司小公司都有。经历笔试的公司并不是太多,不过也有,这次就先总结经历的笔试题,也有些笔试题我没记录下来,主要是觉得没有什么意义,因为有的地方还问一下比较陈旧的技术,这种问题就直接不想答了,比如有的公司还在问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),每个整数之间使用空格分隔 输出只有一行,即列表A中删除列表B元素后的整数列表,输出元素按照在列表A中的次序排列,每个整数之间使用空格分隔 样例输入: 这道题的答案不唯一,我给出的思路是,两个数组转为两个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等开源项目的源码阅读。 明天就又要继续面试了,越挫越勇,加油吧! ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |