前言
记录的是京东正式批进行的笔试。总体感觉就一个字:水… 我提前一小时交卷了。
然后是吐槽一点:就开一个摄像头作为监控吗??那岂不是想怎么搞就怎么搞了?算了..反正笔试这种东西…看看就行了,自己靠实力做就行了。
选择题
这是我第二次做这种笔试题,前一次是PDD那里的,人家出了4道算法题,看你过几道然后给分。京东这里明显不一样,我记得是30道选择题60分,然后2道编程题给40分。
选择题基本都是来送的,唯一让我有印象的几道题:
- 一道是关于连通图的,我早就忘光了,就随手选了一个。
- 一道是栈溢出的,我只能凭借我的回忆来写一下:
1 | public class StackOverFlow { |
判断下这个的输出结果,给定的栈和堆都是128M。我没怎么计算就直接选了一个java.lang.StackOverflowError。
什么顺序文件查找算法?没听过,就感觉像二分查找,根据这点直接乱选了一个。
shell中的shift;
Linux是嵌入式系统吗?Linux支持所有的因特网协议吗?忘了我选了什么,现在来看如果硬要二选一,我感觉Linux应该并不能支持所有的因特网协议。
数据库实体完整性,真的不了解这些概念上的东西。
大概就这几题稍微有点不太会,其它就是直接看题选答案。不过做到后来发现居然是有多选的,emmm希望我没漏选吧。
编程题
第一题
第一题是给你一个数学公式:f(n)=1/5-1/10+1/15-1/20+1/25-......+1/(5*(2*n-1))-1/(5*2*n),让你给出f(n)的值。这题给我第一感觉就是需要用BigDecimal来做,否则有可能精度会出现问题。然而事实是,我想多了….题目中要求四舍五入保留4位小数,且n<=100….那么代码就很简单了:
1 | public class Main { |
毫无难度可言….
第二题
给定两个数字N和M,求这两个数字之间的数字,满足:去掉一位数之后,是回文素数的数字有多少。
首先需要理解下回文素数,那就是这个数字必须又是回文,又是素数,这个的判断非常简单:
1 | public static boolean isPalindrome(int num) { |
同时满足这两个函数,就是一个回文素数了。
然后是去掉一位数的意思,比如我有一个数字是12345,那么去掉一位数有五种可能:2345,1345,1245,1235,1234。只要这五个数字中有一个是回文素数,那么我们就认为12345是满足条件的。
最简单的思路就是每来一个数字,我们把它每个位都去掉一次,然后对这五个数字分别进行上面两个函数的判断。但是且慢,这样会浪费很多的时间,因为有非常多的重复。
所以我最后给出的答案是:我先找到指定范围内1-100000之间的所有的回文素数(一百来个吧),然后用一个list保存一下,最后只需要判断一下数字在不在这个list里面就可以了。
所以最后的算法是:
1 | public class Main { |
总结
京东的这次笔试怎么说呢,编程题比我想象中简单太多了。然后选择题这块,如果它是一个很大的题库,然后每个人都从中都选出一些来做,那我觉得还可以,因为可以稍微保证公平性;如果所有的人都是一样的选择题,那…..JD就不考虑有人拉了群然后直接在群里共享答案吗?不单单需要打开摄像头,我感觉最最起码的屏幕共享总是要的吧?不然真的有什么公平性可言呢?
还有几点对考试系统的改进:选择题做完直接交卷,而且不可修改,不太理解为什么要这么设计。编程题我到现在都不知道怎么看自己的案例通过了百分之多少….