【面试经历】第02次

第二次。150~500人的公司。

1、准备

有了第一次面试的经验,这次我提前准备了很多东西,技术的非技术的都有。提前了解公司背景,发展历程,创始人说过的意义深远的话;提前准备面试当天要穿的衣服(特地买了套正装);刷面试题,逛知乎找找面试的奇巧淫技;带了演示要用的设备(其实就是手机和平板),电脑(一言不合就show code),再带几份简历。


地点还是在西湖区,坐地铁挤公交+走路又将近两个小时了。提早到了1个半小时,在科技园边上的全家(Family Mart)买了瓶矿泉水,坐了一个小时,解暑休息。


坐电梯到了公司门口,一面蛮大的移门玻璃门需要刷卡进入,门外贴着"拒绝一切推销"字样的标志。我穿成这样还真的有几分推销人员的样子。打电话给hr,她说她会让前台的同事帮我开门。进门后,前台的妹子让我在旁边沙发上坐一会儿,面试我的人马上就过来。我略微打量了一下工作环境,宽敞,明亮,虽谈不上高大上,但是也算中规中矩,在这边办公应该不错。


随后被带到一个会议室,等待第一位面试官。第一位面试官姓戴,是做后台开发的。我当时心里满是疑问,我不是来面试Android岗位的嘛?!就算让我转行做J2EE我也能勉强接受,但是XX乐的后台是Web Service做的吧?一面懵逼地回答完他的提问(基本就是让我自我介绍一下,顺便问了一些简历上的问题,没怎么深入)。后来他告诉我,他们公司对所有的实习生都是这样面试的,主要考查基础(算法和数据结构),所以后台来面试Android也无可厚非。

2、上机题

本以为就这么结束了(因为第一家公司,也就Android主管面了我,没有第二轮),其实才刚刚开始。第二轮是上机题目,题目是这样的:

请你实现一个程序,能够下载一个网络上的文件(例如:http://网络地址/文件.exe),并且要求间隔一定时间打印进度、当前下载速度和预计下载结束时间。格式如下:


**50%[==========                    ]1234.5K/s, will be finished in 23.04s**


附加题:实现限速下载(即下载速度不会超过程序指定的速度)。

允许上网查找资料。


既然能上网查找资料,我想应该不会太难。我先实现了下载的功能,然后开始想进度条如何实现。别看轻描淡写的一句话,居然花了我两个小时才做出来。至于附加题,我实在没什么想法,那个面试官说,在控制台输入限速的数字。Excuse me?控制台在打印下载进度啊。在下载过程中限速?反正没把附加题做出来,就吐槽两句。【2016年07月14日更新:【面试题目】Java文件下载(限速、进度条)

3、算法

3.1、栈

后面的面试也蛮有意思。第三轮,面算法和数据结构。面试官一上来,就说:实现个堆我看看。阿勒……数据结构有堆吗,我只知道栈啊。(后来才知道,貌似讲的是二叉树。)“栈吗?那你说说你在写程序过程个用到栈的例子。”然后我就讲了,我在做计算器的时候,将正序表达式转换成逆序表达式时,使用过栈。然后他然我写一下伪代码。结果一时脑抽,想不起来了。“你要再想想还是我们进行下一题?”我果断选择下一题。这一题就比较有意思了。

3.2、赛马

一共有25匹马,赛马场有5条跑道。
你手上没有计时工具,只能通过比赛看出哪匹马跑得比哪匹马快,并不知道绝对速度。
每匹马每次出场的状态一样。(马A跑得比马B快,无论比多少次都是这个结果。每匹马的速度是一定的,不变的)
求:至少比多少场才能得出跑得最快的三匹马。

直接说答案吧:7场。每5匹一组,5场。每组获胜的马,再比一场,第6场。第6场获得第一名的马就是25匹马里最快的那匹。剩下还有可能是第二名、第三名的马有:第6场的第二、三名,第6场的第一名(25匹里的冠军)之前所在组的第二、三名,第6场的第二名之前所在组的第二名。这里正好又凑齐5匹马,再比一场。第7场的第一二名就是,25匹马的亚军和季军。
当时不知怎么的想着二进制的东西,经过面试官引导才答出来。

3.3、称重

第三题:

有一个1000g重的物体,可以将它分为若干个整数重的小物体(作为砝码),要求这些砝码可以称出1~1000g以内任意重的物体。砝码只能放一边,求砝码数最少的分法。

答:1 2 4 8 16 32 64 128 256 489。理由:二进制

进阶:

砝码能放两边,求同样的问题。(比如我有重量分别为1、3、5的砝码,就可以称出重量为1、2、3、4、5、6、7、8、9的物体)
答:1 3 9 27 81 243 636。理由:我是递推出来的。从最小的开始,能称1g的物体必须要有一个1g的砝码。然后1g能称了,接着就要称2g。你可以再来个1g的也可以再来个2g的或者3g的,但是三者比较之下,加个3g的不仅能称2g还可以称3、4g,比加个1、2g划算。由此可见,只需将前面的砝码重量*2+1及可以得到下一个最“划算”的砝码重量。1、3已经可以称1~4g的物体,接下来要称5g。那就4+5=9。下一个砝码切成9g最划算。差不多可以总结规律了,就是3的整数次幂等比序列

二进制我是立马答出来了,毕竟上一题就在想二进制。但是进阶的这个。我想了很多……当时的心理活动大概是这样的:斐波那契试试,1 2 3 5 8……可以覆盖前面的所有数字,不过好像不是最佳。难道还是跟二进制差不多?2^n-1?那就是1 3 7 15……貌似可以,精简了不少。思维又回到斐波那契,隔一个抽一个好像也可以,1 3 8 21……这个够精简了吧。询问面试官。他摇头。最后还是靠引导,太衰了。时候又拿1 3 8 21……演算了一遍,发现就比“3的等比数列”多了一个砝码。要是1000g那个条件取得再小一点,两种分法(3的幂、斐波那契隔一个)就有可能一样了。我还特意算了一下这个数值区域为:365~609g。(这算不算侥幸心理?)

4、面向对象

接下来的一轮面试有两个面试官。这也是让我感觉最不好的一轮。不是自己表现不好,是感觉面试官表达问题有障碍。他问做一个邮箱系统,你需要设计什么哪些类。我说,联系人,邮件,信箱、邮箱系统。邮件内有两个联系人(收件、发件);信箱内有一个List<邮件>类型的成员属性;收件箱和发件箱继承信箱并使用单例模式;邮箱系统包含以上所有,再加上发件和收件的功能。他貌似对我的设计不满意。又说加一个收藏夹功能,可以收藏邮件。拼命引导我去做一个什么CURD的接口,让收件箱、发件箱、收藏夹去实现这个接口。我说这都是一样的功能吧,为什么不把CRUD实现在信箱这个抽象类里面,为什么要接口?他非要说不一样,也说不出哪里不一样。估计在这里他觉得我面向对象的思想还不行,也就没说下去了。另一个面试官全程沉默,不知道在想什么。我觉得他没有给出能说服我的理由,瞎写什么接口。后来又问了联系人有哪些属性。我说姓名、地址、电话号码、邮箱号码等。他问我联系人删选,有多个条件、删选条件无限。我没听懂无限这个意思,而且因为上一个接口的问题让我很不爽。我直接回口不知道。现在想想还是太冲动,可以再问问他题目的意思。毕竟人家表达能力有问题。//滑稽脸


再往后没有技术性的问题了,也记不清了。因为没有谈薪资的步骤,我想八成是挂了。果不其然,第二天就收到了拒绝的邮件。

** 5、总结**

虽然没能通过面试,但是还是学到了很多东西。小公司招聘,要的是能上手干活的人;大公司招聘,要的是算法好脑子灵光的。这次面试的这家公司算不上大公司,但也是发展劲头很大的公司。本来也是看重这一点去投的简历。本来准备了很多Android和Java的面试题,全都没用上。带着笔记本电脑,也没来得及show code,也不知道show code是否合适。先闭关研究一下算法再说。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 三握手是TCP协议中建立连接的过程。它的作用有几个方面。首先,通过三握手,可以确认双方的接受能力和发送能力是否正常,确保双方可以正常通信。其,通过三握手,可以指定自己的初始化序列号,为后面的可靠传送做准备。此外,如果是https协议,三握手还会进行数字证书的验证以及加密密钥的生成。\[1\] 在回答三握手的时候,我们可以描述得更详细一些。三握手的过程中,双方会经历多个状态的改变,这些状态也是面试官可能会问到的点。例如,第一握手,客户端向服务器发送SYN包,表示请求建立连接;第二握手,服务器收到SYN包后,回复一个SYN+ACK包,表示接受请求;第三握手,客户端收到服务器的SYN+ACK包后,向服务器发送确认包ACK,表示连接建立成功。这样的描述可以更加详细地解释三握手的过程和状态的改变。\[2\] 至于四挥手,它是TCP协议中断开连接的过程。在四挥手中,客户端和服务器都需要发送FIN包来关闭连接。具体过程如下:首先,客户端发送一个FIN包给服务器,表示不再发送数据;然后,服务器收到FIN包后,回复一个ACK包,表示接受关闭请求;接着,服务器发送一个FIN包给客户端,表示服务器不再发送数据;最后,客户端收到服务器的FIN包后,回复一个ACK包,表示接受关闭请求。这样,双方都确认关闭连接,完成四挥手。\[3\] #### 引用[.reference_title] - *1* *2* [三握手和四挥手(面试必问)](https://blog.csdn.net/weixin_52109884/article/details/119885387)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [TCP的三握手与四挥手理解及面试题(很全面)](https://blog.csdn.net/qq_38950316/article/details/81087809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值