java吧 关注:1,302,568贴子:12,854,741

【面试经历(续)】---- 完结篇

取消只看楼主收藏回复

接上一篇pptv的面试经历··
http://tieba.baidu.com/p/2948470009
其实pptv终面只问了两个算法题,所以这一次会加上阿里巴巴的面试,一共六轮(5轮电面+1轮现场面,楼主跪在了最后的终面上····实在是有点遗憾,前面5轮都过来了,挂在了最后一轮不到20分钟的面试),因为阿里巴巴的面试时间跨度较长(前后共一个月),所以我有可能记不清所有的题,更新的速度可能也会慢一点(要回想题目)。。二楼开更(不要再抽我的帖子了,度娘··)


IP属地:浙江1楼2014-04-21 17:45回复
    先说完pptv的终面吧,16号下午去他们公司终面,面试我的就是上一个面试官说的领导--据说是清华毕业的,在微软工作过的大牛··,那天好像有其他公司来PPTV洽谈什么业务貌似,那个面试官要去开会,所以这次面试不超过30分钟··,只有2个算法题。(我跪了一个··这次面试感觉不是很好··现在还在等消息估计也是挂了),下面是题目。
    1、给定一个方法f();这个方法一次可以排序5个数,给定25个无序的数,怎么只用这个方法从这25个数中选出前4个,最少要调用几次这个方法?


    IP属地:浙江2楼2014-04-21 17:50
    收起回复
      2026-05-10 05:02:26
      广告
      不感兴趣
      开通SVIP免广告
      这个题目其实算简单的···但是我没求出最优解,(因为面试官问了我还没有更好的办法)
      我给的答案是9次,把25个数分成5组,分别对这5组进行排序(5次调用),然后分别取这5组的最大数(或最小数)排一次序,可以确定一个最大数(或者最小数),接下来依次重复这个步骤(就是每次都从每一组里取出最大数进行排序),一共需要9次,其实这样的方法做了无用的功,因为排在第五组的数是可以不用去考虑的,第五组最大的数最大也只能是这25个数中第五个大的数,而题目是要取前四个,所以可以忽略第五组,··当时我也考虑忽略第五组能有什么好的办法··但是想来想去最坏情况下还是要9次···所以这道题就这样过了


      IP属地:浙江6楼2014-04-21 18:00
      收起回复
        第二道题是关于算术表达式的,一个算术表达式比如 (1+2) * (3-6)可以化成一个二叉树
        如图
        现在的问题是给你一个这样的二叉树,怎么还原成这个算术表达式


        IP属地:浙江10楼2014-04-21 18:07
        收起回复
          当时我一看这不就是一个二叉树的前序遍历么····但是我又想不可能这么简单···,我把遍历的结果写了一遍发现少了括号···对,就是这个括号把我搞死了···没有接触过这方面的题,没办法也只能硬着头皮写了,我想大概的思路就是要比较运算符的优先级,然后在适当的位置添加括号···当时就是这么和面试官说的··就是按前序遍历,遍历到运算符的时候,查看他的左右子节点是否也是运算符,如果左子节点是运算符,则比较优先级,如果左子节点优先级小于等于根节点,则在输出根节点之前输出一个“)”,同时寻找左节点的最左的一个为数字的节点,在这个节点之前添加一个"(",然后右边的节点处理就和左边的相反了,如果右子节点的优先级小于等于根节点的优先级,输出一个"(",同时寻找其最右的一个为数字的子节点,在其之后输出一个")",当时也是说的稀里糊涂的,面试官问了一句你有没有考虑过多括号的情况,比如
          5 * ((2+4) / 4) 这样的,左边有两个括号···当时我也不知道我这个方法对不对,正在考虑的时候,他就说今天先这样吧,我这边等下还要开会,你先回去吧····那一刻我就知道这次面试是挂了···


          IP属地:浙江13楼2014-04-21 18:20
          收起回复
            先去吃饭了··回来再更


            IP属地:浙江14楼2014-04-21 18:21
            回复
              PPTV的面试就告一段落了···16号到现在都5天了 还没消息基本上可以确定是挂了··,第一个面试官还是挺中意我的·,那天终面的时候他还打了两个电话给我··怕我没来(其实那时候我已经在面试了),可惜他不是领导··
              接下来说阿里巴巴的面试吧···,当时我是在大街网上投的一个阿里巴巴的java开发工程师,上午投完下午就接到电话·,然后就是时间跨度长达一个月的阿里面试之旅····(5轮电话面试+一轮现场终面)
              我没办法回忆起每一次的面试的详细内容···所以我就把我能记起来的题目都写出来吧··不分顺序了··


              IP属地:浙江18楼2014-04-21 18:58
              回复
                我分几个部分吧··
                一、java基础部分
                1、HashMap和hashSet可以有重复元素么? (不可以)
                2、HashMap可以以自定义对象为key么? (要看是否重写hashCode和equals方法)
                3、哪一种map遍历时可以按照插入的顺序输出? (LinkedHashMap)
                4、Object类的方法有哪些(wait,notify,toString,notifyAll,equals,hashCode,不知道还有其他的么··)
                5、遍历map的方法(我说了两种,1.取得keySet,遍历keySet再取得map的value。2.取得entrySet,遍历得到entry就可以得到key和value)
                6、statement 和 preparedStatement的区别(preparedStatement是预编译sql,可以使用占位符,且可以防止sql注入攻击,效率更高点)
                7、你了解preparedStatement的缓存机制么?(不了解··)
                8、preparedStatement的占位符索引从几开始(从1开始 )
                9、你了解java中的classloader么(jvm自有的类加载器有bootstrap classloader, 负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等,ExtClassloader负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class,AppClassloader负责加载当前java应用的classpath中的所有类。)


                IP属地:浙江22楼2014-04-21 19:25
                收起回复
                  2026-05-10 04:56:26
                  广告
                  不感兴趣
                  开通SVIP免广告
                  10、你了解jdk中的concurrent包么? (jdk5以后提供的一个多线程同步工具包,提供Lock接口做到显式的加锁,释放锁,提供Condition类实现线程间通信)
                  11、如果一个Condition对象没有绑定一个Lock,能否调用他的await方法(不知道···估计是不能吧)
                  12、jvm内存中堆和栈的区别(堆中存放对象,栈中存放引用··)
                  13、对于java中的异常处理你有什么见解(···以前看过一个异常框架的设计,貌似是要设计一个顶层异常,然后把其他的异常转化成这个异常再向上抛出··)
                  14、java的垃圾回收机制你了解多少(jvm会启动一个垃圾回收线程 不定时的回收不再有引用的垃圾对象··)
                  15、你了解新生代和老生代么?(jvm内存可划分为三块,新生代,老生代,永久代,新生代又分为一块eden区和两块suvivor区,新产生的对象在eden区,当eden区满时,触发gc,将存活的对象复制到suvivor区,如果suvivor也满,再次gc,把存活的对象复制到老生代···大概是这样吧,记得不太清)
                  16、你了解jvm调优么···(调节初始堆内存的大小···当然是越大越好··,调节新生代的大小,对于响应要求高的应用尽量调大,因为新生代越大,触发gc的频率越低,老生代的大小怎么调节··不太清楚)


                  IP属地:浙江23楼2014-04-21 19:44
                  收起回复
                    17、怎么对集合进行排序(先实现comparable接口,调用Collections.sort方法)
                    18、编译时异常和运行时异常的区别(编译时异常需要强制捕获(try catch),运行时异常不需要,程序发生了运行时异常就停止运行了)
                    19、字节和字符的区别(字节是计算机的一个标准计量单位,占8个二进制位,字节流读取的时候就是一个字节一个字节读取的,字符是用来表示现实生活中的符号的,可能占多个字节,看具体的编码是什么,读取的时候就是按一个字符一个字符读取的)
                    20、Thread的sleep方法和Object的wait方法有什么区别(最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。)
                    21、进程和线程的区别
                    22、什么是死锁?描述一种死锁出现的场景


                    IP属地:浙江27楼2014-04-21 20:04
                    回复
                      23、Interface和抽象类的区别(这个百度一下就知道了``)
                      24、你了解回调么?(回调在GUI编程中使用的较多,给一个按钮设置监听事件就是使用回调)
                      关于java基础的问题差不多就这些了····实在是想不出了,接下来再说别的部分的题吧


                      IP属地:浙江30楼2014-04-21 20:19
                      收起回复
                        因为我做的比较多的是web方法的开发,所以自然而然也会问一些J2EE的问题 包括一些框架
                        以下是我能记起来的题目
                        1、j2ee是什么···(坑爹问题···,百度一下)
                        2、你了解JMS么?(听过不了解···)
                        3、servlet的生命周期(如果在web.xml中配置了servlet的loadstartup参数,小于0 的时候,servlet是在初次被访问的时候被加载,如果大于等于1,则是随tomcat启动而被加载,然后销毁是在web服务器停止的时候)
                        4、什么是同步,异步消息(举个例子··ajax就是异步消息)
                        5、JSP和servlet的却别(jsp本质上也是servlet。。具体百度)
                        6、session和cookie的区别(session保存在服务器端,cookie保存在客户端)
                        7、如果客户端禁用cookie怎么办?(这里的考点是session需要使用Cookie保存的唯一标识符--jsessionid,解决办法··URL重写,在url后附上jsessionid)
                        8、你用过数据库连接池么?,数据库连接池的原理了解么(用过··原理就是把数据库连接缓存起来)
                        9、HTTP 和 HTTPS的区别(HTTPS是HTTP+SSL,安全的连接···具体百度)
                        10、POST和GET的区别(老问题了···)


                        IP属地:浙江33楼2014-04-21 20:41
                        回复
                          。。。真的记不大清了··J2EE的大概就这些吧··,然后还问了Spring框架。
                          1、spring框架的主要思想(AOP、IOC```只要稍微百度一下也能说的八九不离十了)
                          2、AOP的实现方式(主要有两种,1、使用JDK的动态代理。2.、使用cglib动态修改字节码生成代理类)
                          3、AOP的应用(事务管理··日志管理)
                          洗澡去了··今天暂时更到这吧,明天继续更·


                          IP属地:浙江36楼2014-04-21 21:11
                          回复
                            继续更。。
                            话说框架方面的知识也没问多少,就问了下spring了核心技术,然后还问了问你接触过的开源框架或者项目,我提到的大概有主流的三大框架SSH,springMvc,一个任务调度的框架(quartz),一个权限框架(shiro),一个即时通讯的开源项目(openfire),然后面试官问你是因为项目需求还是自己兴趣去使用或者接触这些框架,····肯定大多数都是项目需求了,但是为了表现出自己对技术的兴趣,就说了一个当时在企业实训的时候自己用quartz框架做的自动打卡程序···
                            随后面试官问既然你接触过一些开远框架,那你了解github么,···听过其大名但是真没接触过,貌似只在上面下载过框架的源代码,然后他又问那你是从哪接触的开源框架···我一想接触框架的渠道好像五花八门··但是为了显得专业些,就说了一个我偶尔会去逛的开源社区---开源中国。
                            面试官还问了是否看过一些开源框架的源代码···我说看过一些比如hibernate和Spring的源代码,但是看不太懂,然后他问你了解spring事务机制是怎么实现的么···?这绝壁不知道啊··只好扯了下AOP的原理,说就是通过AOP实现的,然后他又问你知道在spring中怎么使用事务么···这个还是知道一点的,如果是使用hibernate的话,把SessionFactory注入到spring的TransactionManager中,在配置文件中开启注解驱动,然后在需要事务的方法前打上一个@transactional注解就行了


                            IP属地:浙江69楼2014-04-22 12:24
                            回复
                              2026-05-10 04:50:26
                              广告
                              不感兴趣
                              开通SVIP免广告
                              接下来再说说关于项目有关的问题,阿里巴巴的面试官会问你在项目中碰到的难题有哪些,比较注重你解决问题的能力。
                              一开始是让我把我所有做过的项目都介绍一遍···但是大多数都是web项目,千篇一律的不是jsp+servlet就是springmvc也没多大意思···面试官听到一半也就打断了我,要我说说你在项目中碰到的比较难的问题然后你是怎么解决的。。。
                              这个问题确实让我很纠结···因为作为一个还没毕业的学生在web项目中能遇到什么难题呢···?做出来的网站的基本上没访问量,又没几个实际的项目,后期维护也没有参与过(其实根本就是没有后期维护,做的都是练手项目),框架的技术这么成熟,想碰到难题都难····
                              思考了一下还是说了一个关于Hibernate的lazy load的问题,使用lazy Load有时会碰到session关闭的情况,所以可以使用spring提供的一个opensessionviewfilter来保证session在返回到jsp时不关闭。
                              另外一个就是我在做一个微博搜索的网络爬虫项目里遇到的验证码问题,频繁访问微博页面会出现验证码····我试着使用像素对比的方式去自动识别验证码···但是成功率非常低,最后就只能把验证码下载到本地手动输入了。。


                              IP属地:浙江70楼2014-04-22 12:37
                              回复