前期先做一下总结,等找到工作后再做全面的面试经历总结。为了确保对公司的隐私,公司的名字我就不写了,以做什么内容代替吧。
1.在发布-订阅(publish-subscribe)消息模型中,订阅者订阅一个主题后,当该主题有新消息达到时,所有订阅者都会受到通知。下面哪个设计模式最适合这个模型?
A.适配器(Adapter)B.(Bridge)桥接模式C.状态模式(state)D.观察者模式(Observer)
【答】D.观察者模式,这个要对这几个设计模式有了解才能知道是哪个。
2.栈和队列的共同特点是
A.只允许在端点处插入和删除元素
B.都是先进后出
C.都是先进先出
D.没有共同点
【答】A.只允许在端点处插入和删除元素。这个了解了这两种数据结构就明白了,排除法也能排除掉。
3.下面哪个表达式是不合法的
A.List
B.List
C.List
D.List
【答】B.List
4.假如某个JAVA进程的JVM参数配置如下:-Xms1G-Xmx2G-Xmn500M-XX:MaxPermSize=64M-XX:+UseConcMarkSweepGC-XX:SurvivorRatio=3,请问eden区最终分配的大小是多少?
A.64MB.500MC.300MD.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.TCPB.IPC.IPXD.ICMP
【答】A.TCP哎。。。,网络编程这块是我最薄弱的地方,所以一些基本的只是我也不太清楚,这个没答对,当时选的是D。
6.文件aaa的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,下列哪些命令正确的是?
A.chmoda+xg+waaa
B.chmod764aaa
C.chmod775aaa
D.chmodo+xg+waaa
【答】AC,在linux系统中,drwxrwxrwx——第一位表示文件类型,第一个rwx表示所有者的读/写/执行权限,第二个rwx表示同组用户的读/写/执行权限,第三个rwx表示其他用户的读/写/执行权限。根据题目要求,修改后的文件权限应该为rwxrwxr-x,即111111101=775。
7.ls-l显示如下:-rwxrw-r--1aaabbb03月411:21ccc,下面哪些说法是正确的?
A.该文件是个目录
B.该文件拥有者所在组用户有权限修改文件
C.该文件权限的数字表示是764
D.该文件拥有者是bbb
A.Post请求一般用于修改服务器上的资源,对发送的消息数据量没有限制,通过表单方式提交
C.可以通过206返回码实现断点续传
【答】ACD,这个网络编程又到了我的软肋了,这个真的不知道答案,正确答案也是后来在网上搜出来的,当时就蒙了一个D选项。网络编程的书籍已经准备好了,马上就要学习起来这块的知识。
9.以下哪个函数不能直接出现在WHERE子句中?
A.SUMB.COUNTC.ORDERBYD.GROUPBY
【答】AB,这个还是比较简单的,聚合函数不能出现在where后面。
11.以下哪些事件会直接导致Linux系统从用户态切换到内核态?
A.响应硬件中断
B.编译程序源码
C.执行系统调用
D.查看系统日志
【答】AC,系统调用、硬件中断会触发用户态到内核态的切换。Linux的知识也不是太了解,这块内容也是以后要恶补的地方(标注起来)。
12.以下说法中正确的有?
A.StringBuilder是线程不安全的
C.HashMap中,使用get(key)==null可以判断这个Hasmap是否包含这个key
D.volatile关键字不保证对变量操作的原子性
【答】AD,StringBuilder是线程不安全的是对的,Java类可以同时被abstract和final修饰,abstract修饰类是为了让子类去实现自己的功能,而final修饰的类是表示不能有子类,这两个关键字相互矛盾所以应该是不可以同时修饰一个类的,HashMap中是可以存在值为null的键值对的。所以不可以通过get(key)==null来判断,volatile可以保证变量的可见性,不能保证变量操作的原子性,(例如:i++这种操作是需要转变成newAtomicInteger(i).incrementAndGet())。
13.下列哪些类型能被throw语句抛出?
A.ErrorB.ExceptionC.ThrowableD.Object
【答】ABC,Error也是可以被throw的,只是通常Error出现程序就中断了,我们并不会去捕获。
14.以下不同的数据库类型中,哪些不属于关系型数据库范畴?
A.MongoDBB.PostgreSQLC.RedisD.HBase
【答】ABD,这个用过这几个数据库的应该一下就能分辨出来。
15.Java如何进行序列化
【答】Java中如果想要将某个对象序列化,该对象的类需要实现Serializable接口或者实现Externalizable接口。不同的是:实现Serializable接口无须实现任何方法,而实现Externalizable接口则必须为writeExternal()和readExternal()两个空方法提供实现。——在目标类实现了接口以后,就可以通过ObjectOutputStream将目标类对象进行序列化并输出了。
16.Exception,Error,RuntimeException在java异常处理中有什么不同
17.wait(),notify()和notifyAll()在使用的时候需要放在同步方法/代码块中吗?为什么?
【答】需要放在同步方法/同步代码块中,因为这三个方法必须由同步监视器对象来调用。在同步代码块中,同步监视器对象就是synchronized()括号中的对象;在同步方法中,同步监视器对象则是隐式的当前对象this。——在调用wait()之前,当前线程已经通过synchronized获得了同步监视器的对象锁,调用了wait()以后,线程进入阻塞状态,并释放对象锁;其他线程获得了同步监视器的对象锁以后,就开始执行它的同步方法/代码块了,在同步方法/代码块中如果调用了notify(),则会唤醒在同步监视器对象上wait的任一线程,等剩余的代码执行完后,释放对象锁;被唤醒的线程尝试获取对象锁,获取到了以后线程继续向下执行。notifyAll()和notify()类似,只不过notifyAll()是唤醒在同步监视器对象上wait的所有线程,这些线程后续会争夺对象锁,谁得到对象锁谁继续执行。
18.编程:在一个整数的数组中删除另外一个整数数组中的元素,并保留原数组的次序
输入包括两行:
1.第一行是被删除的整数列表(记为列表A),每个整数之间使用空格分隔2.第二行是需要删除的整数列表(记为列表B),每个整数之间使用空格分隔
输出只有一行,即列表A中删除列表B元素后的整数列表,输出元素按照在列表A中的次序排列,每个整数之间使用空格分隔
样例输入:1234524样例输出:135
这道题的答案不唯一,我给出的思路是,两个数组转为两个ArrayList然后通过两次遍历,把第一行数组中和第二行数组中相等的元素放到一个新的list中,最后直接用第一个数组的list调用removeAll删除到新生成的list中的元素。
/*以下代码通过给定某LinkedList的第一个元素firstNode,查找第倒数第n个元素,请补全代码,并纠正其中的错误,让它能够通过java命令行直接运行,TestUtil不必实现*/
publicabstractclassTest{classLinkedListNode{//不用自己实现}LinkedListNodefindTheLastElement(intn,LinkedListNodefirstNode){LinkedListNodefound=firstNode;//TODO:具体实现System.out.println("done");returnfound;}staticvoidmain(String[]args){LinkedListNodecandidate=TestUtils.init();Test.findTheLastElement(3,candidate);}}【答】待纠正的错误是findTheLastElement方法不是静态方法,不能直接使用Test类名调用,main方法没有使用public修饰符。
具体的实现我一开始觉得比较简单的,因为LinkedList是双向链表,所以知道了第一个,要求倒数第3个的数量,就直接从第一个往前倒退三个元素就可以了。调用第一个元素的prev获得倒数第一个元素,再调用倒数第一个元素的prev获取倒数第二个,然后同样方法就可以获取到倒数第三个了。
后来在和第一个面试官聊的时候,如果说现在双向链表改成单向链表了,怎么实现这个功能,我想了想,那就通过两次遍历来实现,第一次遍历,知道了LinekedList的长度,长度减3就是目标元素,在第二次遍历的时候遍历到目标元素直接就可以取出来了。
后来这个面试官说我这样虽然可以实现功能,但是麻烦了一些,还有其他的方式吗?他给出了一种思路,例如:要获得倒数第3个元素,可以在把前3个元素保存起来,遍历完后3个元素后,保存的元素就变成了后3个元素,然后知道遍历到最后一个元素为null,这样如果说最后一组里遍历到第一个元素就结束了,那保存起来的三个元素中间那个就是倒数第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
()
请问最后一个括号里应该填哪个数字?
这种找规律的题,一般问总会找一下相加、相乘、相除、或是前后相乘得后面等等这种规律,但是这个题的规律还是比较有意思的,规律是数数字。
还是简单写一下吧。
33
131个3
11131个1,1个3
31133个1,1个3
1321131个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等开源项目的源码阅读。