当前位置:首页 > Java知识 > 正文内容

公务员考试 面试题(面试真题 公务员)

abcsky886个月前 (10-31)Java知识77

今天给各位分享

文/匿蟒(简书作者)原文链接:http://www.jianshu.com/p/76cb546daabc前言我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才所以,我特地调低了期望,很少问什么深入的技术问题,只问一些广泛的、基础的。

公务员考试 面试题(面试真题 公务员)

我只要最终给Leader一句“这个人技术还行/很好/非常好”,就行了至于其它能力、综合水平,由别人把关为此,在挑选唯一的一道笔试题时,我特别地上心首先,我不敢用网上那些广为流传的,比如Leetcode、《程序员面试宝典》里的题——

这些都太难了!正儿八经做,其实很少有人能在1小时内完美做出来,除非之前遇到过我本人也并非什么思维敏捷的牛人,不然也网络推广不会混得这么惨正所谓己所不欲,勿施于人,我也不希望以后别人考我特别麻烦的算法题,所以自创了一道特别简单的。

其次,对Java程序员来说,大多数情况下不需要写什么复杂的算法相反,Java层主要做的是界面控制、业务逻辑、数据流之类的,更提倡代码的简单和可读,尽量用既有的公共类库,不惜损失一些运行效率拿一道复杂的算法题,考一个Java程序员,多少有点刁难人。

最后,还是那个薪资待遇和人才梯度问题没有Google的工资,就别考Google的题;没有Google的向心力,就别期待有Google级别的人才来面试亮题以下有一个static method,类外会调用它,一个个地插入一些元素进入一个List。

可以改网络推广变这个List内容的,只有这一个method,要求任何时候这个List都是有序的比如,依次插入3、2、1、2,我希望List的顺序是1、2、2、3classSolution{        private。

static List sSorted = new LinkedList<>();        publicstaticvoidaddElement(int e){                //

TODO: Insert e to sSorted and make sure sSorted is always sorted.    } }我会给出15分钟网络推广的时间,而其实往往会再多给10分钟(有兴趣,你可以停在这试试。

相信在看文章这种轻松的环境下,理清这道题的思路也就10~30秒)(为什么下限是10秒呢?唉……一不小心暴露了我智商的峰值我实际问过一些同事,他们通常在理解的同时,就立刻给出了正确的思路,过程不足5秒,其中甚至包括一个硬件工程师,和一个只负责沟通和文档的妹子。

)提示在过程中,我会逐步给出一些提示,从接口到思路,都会主动提供,其它也基本有问必答如果单纯考算法,C语言才是最合适的,因为它没有什么高级的工具类,什么复杂点的都得自己写而Java,则有一些“基础”类库是难以记忆的。

比如前面出现的java.util.List,就没有多少人能在纸上网络推广写出它的常用接口我并不想考察什么死记硬背,在这个时代,断网后本来就没几个程序员能正常编程所以我会主动提供一份List的不完全接口列表public

interfaceList extendsCollection {        publicvoidadd(int location, E object);        publicvoid

add(E object);        publicvoidclear();        publicbooleancontains(Object object);        publicboolean

equals(Object object);   网络推广     public E get(int location);        publicintindexOf(Object object);

   publicbooleanisEmpty();        public E remove(int location);        public E set(int location, E object)

;        publicintsize(); }我没有给出完全的接口,因为给多了无疑是误导人真正能用上的接口其实也就3个,但我也总不能只给3个,提示得太明显,也限制了对方的思路所以,给出了可能用得上的这几个。

我也没给出注释,网络推广因为有声明就已经够了而且如果对方问起,我也会给出解释一开始我想,考一个排序算了但是转念一想,这也太不负责任了对面要是背一道冒泡排序的解法上来,达不到考察技术水平的目的,Boss也不会认可。

本着“放水不能太明显”的原则,我想考插入排序,并且把题目弄得没多少人见过排序是一类基本算法,合格的程序员至少会一种大多数人都只会入门级的冒泡排序,而我更喜欢插入排序,原因……你会明白的插入排序,其实就是把数组或列表在逻辑上分成两部分,一部分是待排序的,一部分是有序的。

一开始,有序的部分只有一个元素(或者一个都没有),然后从待排序的部分里一个个抽出来,插入到有序的部分等元素都插入到了有序的部分,排序过程也就完成网络推广了你看,也就抽插N次的事而我这道题,就是只考插入排序算法的一半,会插就行。

在面试过程中,我甚至常常亲自解释插入排序是怎么回事——放水到这个份上,我都不忍心再退步了真正的考察点这是一份Android平台的开发工作,Boss要求的是能干活、干好活我给出的建议要求是:熟悉Java有良好的沟通、表达能力。

学习能力强,喜欢不断拓展计算机领域的知识有良好的编码习惯,愿意为代码的简洁、优雅而反复修改我建议Boss放弃学历和工作年限的要求,技术岗位就应该只考察技术(和其它基本能力),不应该考察技术的间接证明Java

是Android的基本功(我们不玩Kotlin、Scala、React Native等新花样),网络推广这门语言如果不扎实,那至少得带半年我没有在Android岗明确地要求考察Android,是因为Android的那些东西相对来说容易学习。

即便是毫无经验的新手,要搞清楚什么“四大组件”“五大布局”,也就一两天的事而如果Java不够扎实,各种肉眼可见的大小bug就会层出不穷,知识盲点一两年都补不完沟通是职场基本功如果话都说不清,那么会显著降低团队的沟通效率。

而且,我个人认为,话说不清的人,代码一定写不好语言条理清晰,逻辑层次分明,体现到代码上,就是简洁、明朗学习能力、求知欲,是作为一个程序员的基本素养因为,大部分人的工作,类似于在一堆按钮中,找到合适的那个按下去;而程序员的工作,往往是闭着眼睛这么网络推广干。

开发工程师通常是在一堆未知(没读过的代码、不知道的接口)中,把一小部分变成已知(读懂了的代码或接口),进行一些增删改,最后达成外界(产品经理、设计师、测试工程师)赋予的业务目标一些职业卖口水,一些职业卖口才。

一些职业卖青春,一些职业卖肉体(咳咳,我说的是空姐和搬砖,想歪的去面壁)一些职业卖知识,一些职业卖能力程序员,或者说软件开发工程师,卖的是学习能力(其实也包括青春和肉体),快速学会各种知识,找到那些藏在屏幕外的按钮,并且正确的按下去。

比如,像Bash这类Command line工具,就是自己敲命令出来执行,而不是去界面上找功能对应的按钮;而程序设计、实现,就是去发现、或者创造一种解决问网络推广题的办法,然后用代码表达出来——你看,都是在干一些反UI、UX设计的事。

唯有不断地学习,才能提高效率,把自己从加班中解脱出来,把项目从bug中拯救出来所以,厌学的人当不了好程序员,也干不长编码习惯,相对次之部分观点认为,这东西伴随一生,如果一开始没有好习惯,这辈子都没办法改了。

Boss就是这么认为的,我倒是不这么认为我相信编码习惯的可塑性是很高的——你不按规范写,我不给你merge,改不改?但是,编码习惯作为程序员的软技能,还是可以一定程度上看出其技术素养、代码质量的至于优雅什么的,我其实没有真的敢这么期待。

所以,我这道题其实是考察这四点能写出来,并且无明显问题,代表Java基本功扎实理解我对网络推广题目的描述,和我确认清楚题目的细节,这是看沟通能力List接口不知道,我给你啊;插入排序不会,我教你啊;其它还有什么不会,你问啊——这是在考察学习能力。

代码的字里行间,可以明显看出编码习惯面试结果总体来说,我很伤心第一位就让我很伤心,当我看了他前两行代码,就不忍心接着往下看:privatestatic List sSorted = new

LinkedList<>();    publicstaticvoidaddElement(int e) {        if (null == sorted) {            sorted.add(e);     网络推广   }

// I couldnt read more!第一行就编译不过如果他对Java的一些命名规范有一定的了解,就绝不会把sSorted写成sorted(当然,sSorted也许并不是合适的命名方式,因为s和m这类前缀有些冗余。

我通常遵守Android源码的通用规范,它是有这类前缀的)第二行必然抛出NullPointerException,而不知道是该庆幸还是悲伤的是,它永远执行不到根据我已经给出的一个接口addElement。

,和可以猜到或者问出来的读取接口,都是不会把sSorted变成null的这体现了沟通、理解能力的一点问题此外,即使sSorted因为什么bug而变成null,这里也不网络推广应该做处理,而是任其抛出NullPointerException,或者转义一下,主动抛出IllegalStateException。

否则,此处将变成一个不会crash的隐藏bug不能用正常处理,代替异常处理;当然,也不能用异常处理,代替流程控制另外,更令我失望的是,有一位是这么写的:        for (int i = 0; i < sSorted.size(); i++) {

if (e == sSorted.get(i)) {                sSorted.add(i, e);            }        }我问网络推广他,如果这个元素不在这个List里存在怎么办?如果这个List是空的怎么办?他顿时一囧,我也一起囧,心想自己是不是太坏了。

还有一位,仿佛听见了我这几个问题,他竟然一一作答:if (sSorted.size == 0) {            sSorted.add(e);            return;        }        

if (e >= sSorted.get(sSorted.size - 1)) {            sSorted.add(e);            return;        }        

if (e <网络推广= sSorted.get(0)) {            sSorted.add(0, e);            return;        }        if (sSorted.contains(e)) {            sSorted.add(sSorted.indexOf(e), e);

return;        }        // more...他想干什么呢?也许是优化性能吧,只能这么帮腔了另外,他对size的理解,和数组的length相同这位算是经验比较丰富(30岁),对Java的理解比较深入网络推广的了。

他说排序不需要手写,Java里有现成的接口我说,是这样没错,但接口我没给出,如果你记得,那就写出来吧于是他在刚才那一大段“优化”的后面,这么写了:        sSorted.add(e);        sSorted.

sort(newComp...able() {            public boolean ?(left, right) {                returnright >= left

;            }        });思路上,插入后再排序,我先不吐槽我明明说了“记得”再写网络推广,这Comparable及其接口int compareTo(T another)如果记不清,我就当看lambda表达式了。

可是,他这个?分明是Comparator的int compare(T lhs, T rhs)接口呀!不过,其实这些我都可以捏着鼻子认了,因为我也手写不出来但List是没有sort方法的呀!Arrays和

Collections才有各自的sort方法,它俩算是银弹型工具类,而Array和Collection是没有的这个细节,谁用谁知道,知道了就绝不会记错,尽管就差一个s还有一位,他先插入、再冒泡排序,是这么写的:。

sSorted.add(e);        f网络推广or (int i = 0, sSorted.size(i) > sSorted.get(e), i++) {            temp = sSorted.

get(e);            sSorted.get(e) = sSorted.size(i);            sSorted.size(i) = temp;        }你没看错,

for()里面是,分隔的你没看错,temp是从石头缝里蹦出来的你没看错,List.get(e)是可以对其赋值的你没看错,List.size(i)是可以传参数进去的还有两位网络推广,直接交白卷放弃了其中一位还比较认真,思考了一会儿,说“我不想浪费时间”。

我没乱用词,他确实“比较认真”另一位在我递过去后,直接看两眼就递回来,“排序我不会”,然后看手机去了o(╯□╰)o参考答案我自己在纸上写的时候,花了大概5分钟去思考细节,再花5分钟写出来(唉……一不小心,又暴露了自己奇慢无比的思维,以及奇慢无比的写字速度。

)这比我此前预计的时间多了好几倍!不过,以我给的15~25分钟,应该不算太难为人……吧?

这是我自己在纸上写的答案(如果有兴趣,可以停在此处,考虑下这是否是最优算法)@Overridepublic E get(int location){        if (locat网络推广ion >= 0 && location < size) {            Link link = voidLink;

if (location < (size / 2)) {                for (int i = 0; i <= location; i++) {                    link = link.next;                }            }

else {                for (int i = size; i > location; i-网络推广-) {                    link = link.previous;                }            }

return link.data;        }        thrownew IndexOutOfBoundsException();    }这是java.util.LinkedList在Android(API 23)上的实现,而反编译Oracle JDK 1.8的实现也大同小异。

也就是说,我写的答案虽然看似简洁,但其最坏时间复杂度与先插入再排序也没太大区别网络推广,都是O(n2)终日打燕,反而被燕啄了眼!(暴露了真实水平)我后来又写了一个参考答案,算是勉强在脸上摸了些防晒霜(大家有兴趣可以想想为什么这是一个改进。

当然,一定还有更好的方案)

(我没有在提示列表中给出迭代器,结果自己也被晃过去了)隐藏的杀手锏面试官在出题考察应聘者时,应聘者也在通过这道题考察这家公司为了避免让人觉得这家公司考题太简单、工作内容太无趣、里面的员工(我)水平太低,我还准备了一些后续问题,由浅入深,作为杀手锏。

为什么LinkedList可以赋值给List?考察多态(polymorphism)为什么List要写<>内的内容,而LinkedList<>()可以不写?考察泛型(gener网络推广ic)为什么

List里面是Integer,但放进去和拿出来的都是int?(此处有坑,其实拿出来的还是Integer)考察基本数据类型的自动装箱、拆箱(auto boxing/unboxing)如何在外面有多线程调用时,保证这个唯一的。

List的正确性?考察synchronized和volatile如何在多线程状态下的每一个线程,各保持一个独立的List?考察ThreadLocal(当然,还有一些和Android相关的问题)我真心是没想考算法,所以连算法复杂度的评估都没打算问。

实际情况是,我往往没有机会问这些问题,因为没几个人写出来后记我有一个朋友,也是一个前同事,好学如好色他周末都在找一个大学网络推广教室看书,甚至有时请年假去教室看书一本《Java编程思想》,逐行精读三遍以上工作经验不足两年,跳槽三次,现在在一家百亿级上市公司,年薪三十万,统率十人。

究其原因,无非基础知识扎实,口水喷死面试官尔。尚学堂:每天推送IT新技术文章,跟着我们扩展技术视野吧

即刻起关注尚学堂,发送“要课程”,IT课程免费送!

扫描二维码推送至手机访问。

版权声明:本文由海南拓宏网络科技工作室发布,如需转载请注明出处。

本文链接:http://www.4blc.com/post/1037.html

分享给朋友:

“公务员考试 面试题(面试真题 公务员)” 的相关文章

汇编语言是一种面向机器的语言(汇编语言是一种什么语言选择题及答案)

本篇文章给大家谈谈 汇编语言是一种过渡性的计算机语言它的优点是用人们比较容易理解的符号来代替机器语言所用的数字代码,这种语言具有直观性,但是它也与机器语言一样,与计算机的型号有关,计算机的型号不一样,所用的语言也不一样,同样一个问题,用这一种计算机上的汇编语言(或机器语言)编写的程...

自学两年能考上大学吗男生(两年自考就可以拿毕业证吗?是真的吗?)

今天给各位分享 前两天精英君收到了一位网友的留言,他提出了一个问题,“自学2年java,包装简历2年工作经验,面试了15家公司,但却没有一家通过的,是什么原因呢?”看到这条留言之后,精英君很想对这位网友说一句:简历包装要坚持适度原则,自学2年java却包装简历2年工作经验是不恰当的...

达内java培训班怎么样(达内java教学视频)

本文分享给大家的是: Java程序员面试失败的5大原因?1 说得太少尤其是那些开放式的问题,如“请介绍下你自己”或“请讲一下你曾经解决过的复杂问题”面试官会通过你对这些技术和非技术问题的回答来评估你的激情他们也会通过模拟团队氛围和与你的交流互动来判断你的经验和能力。 所以,...

杀疯了表情包图片大全(杀疯了表情包动图)

本篇文章给大家谈谈 前言本攻略提供了常详细的知识点内涵:各互联网大厂面经、Java基础、MyBatis、ZooKeeper、分布式、多线程、Elasticsearch、、Redis、MySQL、Spring、Spring Boot、Spring Cloud、Kafka等技术栈面试题...

tiobe编程语言排行榜2021年9月(编程语言最新排行榜tiobe)

本篇文章给大家谈谈 IT之家 1 月 7 日消息,软件测试公司 Tiobe 会跟踪软件开发人员所使用编程语言,并每月根据流行程度来发布榜单在今天公布了 2023 年 1 月编程语言排行榜中,该公司评选 C++ 成为 2022 年度最佳编程语言。 今年的亚军是第二大最受欢迎的...

为什么都用java(java为什么不能用printf)

今天给各位分享   Python和Java都是这个时代广泛使用的编程语言不过,与 Java 语言相比,Python 语言在编码行数方面效率更高,它从一个简单的问题开始,与相同工作目的的 Python 相比,java则需要更多的编码行数。 但是,为什么人们仍在使用 Java...