轻流面试一面
腾讯会议聊了75分钟,从5点聊到近6点半,基本没问前端问题
ts
中泛型怎么用的?ts
里面的对interface
,enum
,type
的理解- 平时都是在哪学习?
- 问了简历上的一些比赛,蓝桥杯,传智杯,计算机能力挑战赛等一些比较水的国奖经历?
- 问了问贪心算法?
- 从贪心算法聊到了哈夫曼树,问了问哈夫曼树的应用场景?
哈夫曼树从一个例子引入的,比如学生成绩匹配的策略:
分数 | 90-100 | 80-90 | 70-80 | 60-70 | 小于60 |
频率 | 10% | 20% | 50% | 15% | 5% |
最优的匹配策略肯定是:先判断 70-80 => 80-90 => 60-70 => 90-100 => 小于60
function matchGrade(score){ if(score < 80 && score >= 70){ console.log('cccc'); return; }else if(score < 90 && score >= 80){ console.log('bbbb'); return ; } ..... }
而我们常规的判断策略可能是根据分数高低匹配:
function matchGrade(score){ if(score <= 100 && score >= 90){ console.log('aaaa'); return ; }else if(score < 90 && score >= 80){ console.log('bbbb'); return ; } ..... }
这样两者的写法有多大区别:
假设有100名学生,10个90以上的,20个80-90的....5个60分以下的
第二种写法的判断次数:10 + 20 * 2 + 50 * 3 + 15 * 4 + 5 * 5 = 285,
// 判断次数是指 经过if 的次数
第一种写法的判断次数:50 + 20 * 2 + 15 * 3 + 10 * 4 + 5 * 5 = 200
效率差别虽然微乎其微,但如果把if else 语句延伸更多,测试数据量更多就会有一些变化。
从而可以延伸到哈夫曼的作用(从百度复制过来的):
简单说为了进行哈夫曼编码,这样就可以起到压缩作用。在数据通信中,需要将传送的文字转换成二进制的字符串,用0,1码的不同排列来表示字符。例如,需传送的报文为“AFTER DATA EAR ARE ART AREA”,这里用到的字符集为“A,E,R,T,F,D”,各字母出现的次数为{8,4,5,3,1,1}。现要求为这些字母设计编码。要区别6个字母,最简单的二进制编码方式是等长编码,固定采用3位二进制,可分别用000、001、010、011、100、101对“A,E,R,T,F,D”进行编码发送,当对方接收报文时再按照三位一分进行译码。显然编码的长度取决报文中不同字符的个数。若报文中可能出现26个不同字符,则固定编码长度为5。然而,传送报文时总是希望总长度尽可能短。在实际应用中,各个字符的出现频度或使用次数是不相同的,如A、B、C的使用频率远远高于X、Y、Z,自然会想到设计编码时,让使用频率高的用短码,使用频率低的用长码,以优化整个报文编码。
- 图,图的相关算法,图里面判断环?
- git 相关操作
- rbac模型
- 策略模式,命令模式的使用,大致讲了一些
- 怎么做高内聚低耦合的?
- 有没有什么比较难解决的bug?
- textarea里面内容,如果有//注释要进行提示,但是要去除http://等影响 最后一个问题有点很难解决,甚至面试官自己也没有一个好的解决方案,只能规避一些不容易出现的边界条件
反问公司的业务场景,技术栈。
业务主要是做的 低代码和无代码平台,技术栈用的angular
,说了好久,基本聊了半个小时还多。