一面 先问了项目。关注了商秀app问题:
q:后台是如何将所有模板和实际图片作比对的。
a:是用类似lrucache的方式。最近访问的放队头。然后逐一比对。
然后问了java相关的:
q:你对多线程并发编程了解多少?
a:核心是通过锁的思想解决并发情况下的问题,乐观锁(其实不是加锁),悲观锁(真正的加锁)。回答了synchronized,violate 这俩关键字。回答了线程的几种状态。wait和sleep的区别。
q:什么是线程池?
a:描述了使用场景,以及动态扩展,以及释放。
q:topk问题及其优化。
a:如果数据量大,先hash分堆。在每堆内部利用小根堆计算topk,再reduce合并。
q:follow up,k很大,不适合分堆?
a:利用快排的思想,一次减少flag一边的数据。
q:推算快排法和小根堆法的复杂度各是多少?
a:快排法平均logn,小根堆nlogk。推算。。。
q:快排的优化?
a:针对顺序,逆序,可以使用类似三选一的方法找flag。针对重复数组,记得是可以先将重复集中,再排。没有回答好。待查。(应该是先将与flag相等的元素聚集)
编程题:堆排序。
出现的问题:计算下标要注意。建堆的时候从len/2开始 i-- 调用adjust。而插入的时候是从0开始调用。adjust函数的退出条件没写好:1,无左子树(,一定无右子树,直接return)2,无右子树(若左子树大于根,return)3,都有且都大于根,return。
二面q:spark中用过xx没有?
a:没有。gg
q:简历里的学xi项目autocomplete是词内还是词间?具体怎么做的,流程是什么。
a:词间。job1:先对line做分割,然后对2gram 3gram 4gram词组统计词频。job2:先计算块儿内统计次数,计算概率。再累计次数和重写计算概率(被嘲笑太简单了)
q:虚基类和接口的区别与联系。
a:都是为了实现抽象定义。虚基类是通过继承,只能继承一个,必须实现所有非虚函数。而一个类可以继承多个接口。
q:简述java的类加载机制?
a:讲了下双亲委派,及其作用。提到了判定类相等的两个条件:类名&&类加载器。
q:比较对象重写对象equals方法时,还必须重写什么?
a:经提示,如果对象需要放入集合类,那么就要考虑hash值,所以要重写hashcode。
q:针对决策树,svm,k-means三个算法,哪些可以无监督,哪些对尺度变化不敏感,哪些
a:
q:svm核函数可以拿来做什么?
a:
q:如何对ipv4的地/址进行压缩编码。
a:针对ipv4的四个字段,每个字段都是0-255,可以用8bit编码,一共32bit,实际上可以用一个int来存储编码。
西安飞凡网络技术咨询有限公司
400 011 2010