自我介绍
面试官你好,我是来自东莞理工学院的一名应届毕业生,我学习前端大概一年多的时间,在这期间也跟团队小伙伴一起参加过一些程序设计比赛。之前寒假的时候参加过字节的青训营,做的是一个图表可视化的平台,获得“最具挑战奖”。
我比较熟悉的技术栈是vue3全家桶。在学习过程中,我也会注重知识的积累,也会坚持记录学习的笔记,学习过程中也会写一些demo来验证学习到的内容,来方便自己更好的巩固知识;内容都放在了github上。
目前对开源逐渐的萌发兴趣,接下来,也想努力的来参与开源建设,来融入很好的这个开源氛围中。
选一个项目难点,讲讲你是怎么解决的。
比如就前不久实现的一个功能吧,就是让我博客中的代码可以是实现执行或者预览。其实这个功能一直想做当没有去做。
一开始我尝试用像codepen类似的第三方平台去通过嵌入代码的方式去实现,因为md文件最后也会被渲染层html代码嘛,这个方案是可行的,但是我发现它加载很慢,这效果不是很满意。
后面以为学习了一点编译解析的思路,我就想尝试去实践一下。先是实现js的执行,我能想到的就是借助eval
或者new function
的方式去动态执行代码。
为什么使用new Function
,因为eval
执行的作用域的当前作用域,而new Function
是全局作用域,更符合我们的要求。
然后我需要拿到源代码,我就是写了一个组件,将源代码作为它的孩子结点(文本),这样子我可以在组件内拿到。出现一个问题,换行的问题,于是我用到了pre
标签,这样子我可以拿到保留原格式的代码,实现了动态执行的功能。
对于html呢,我首先想到的是得对样式以及代码的执行做隔离,所以我用iframe
来实现,通过动态的插入style等标签,以及使用innerHTML
来实现。
为什么会选择vue?有什么优势?
如果放在一年前刚接触前端的时间,其实当时只知道vue,不知道react,当时学习的视野还比较狭窄
现在的话,我选择vue的原因有如下
- 有虚拟DOM,可以通过diff算法实现最小化更新,提升更新的性能;另外,有了虚拟DOM可以实现跨平台
- 颗粒级别到组件级别,也就是当数据改变时,只有依赖了该数据的组件才会更新视图,而react的更新默认是整棵树,即使子组件没改变也重新更新,需要开发者手动去指定逻辑。
- composition API,针对不同场景的API设计,文档详细,开箱即用;基于HTML的模板,上手成本低。
- 生态丰富活跃
- 我觉得vue的设计上是非常优秀的,在vuejs设计与实现书中说,vue的实现是权衡的艺术,在寻找性能和可维护性的平衡点,为什么vue会那么好用,因为它给开发者提供的是声明式的代码,而内部封装了命令式代码,这样做虽然会损失一定的性能,但仍然能提供过得去的性能,因为内部也做了很多的优化,把性能损失降到最低。
平时怎么学习
- 学习的内容
- 书籍、掘金小册、极客时间、周刊的文章
- 学习的时间
- 工作外的其他时间吧,每天基本都会在电脑前,除了一些给自己休息,调节的时间
- 利用碎片化的时间,比如坐地铁,地铁上看完一章,回到家后就会先靠自己的记忆,去把demo写一下,然后再结合原文去整理知识。不过还是存在说过了段时间后会遗忘,就只能多去回顾,或者在项目中多实践,自然会记得,所以我还是会比较希望自己学的内容可以在项目中用起来。
怎么理解前端的发展
- 在互联网早期阶段,传统的开发模式中,往往是把前端的网页代码和后端的程序代码混合在一起,借助某种模板技术(如
JSP
、ASP
、PHP
)来在服务器端动态生成HTML
页面。
在这种开发模式下,网页的每次改动都需要前后端人员共同参与才能完成,**网站前后端的开发人员需要很大的沟通成本、协调成本。**企业招人的时候,也不得不招一些既懂前端又懂后端程序员,来减少前后端开发人员的冲突。
这种模式是非常低效的。
现在流行的前后端分离的开发模式,就是让后端只负责给前端提供数据,由前端负责整个页面的模板渲染、数据填充以及交互逻辑。后面就有了前端框架,像vue、react等前端视图框架。
- 另外还出现了前端路由,好处是用户体验更好,不需要刷新网页,问题就是会降低SEO,需要取决于使用场景,对于官网之类的会使用SSR技术,来提升SEO
为什么选择前端
从小热爱美术,喜欢设计,希望设计自己的页面或者项目,对前端的热情更高,直观的看到成果。
另外就是在这个过程中,让我对它不断的会有吸引力。大一下学期有个契机,在一个师兄的引导下,开始前端的学习,后面不断的给自己设定目标,比如大二进团队的暑假,就给团队开发了记账的小程序,后面自己不断的学一些前端相关的内容,到后面想去看书,看源码,自己独立开发项目,不断的越学越深。
用一个词分别概括一下优点和缺点
- 执行力比较强
- 对于自己的东西,比如github、博客等,想做什么会付诸实践,同时去做记录笔记,或者用思维导图去梳理知识。也会去写一些demo,书中的代码,也会倾向于手动写一遍
- 团队合作中,我不一定会做领头,但我会争取做那个完成度最好的人,同时我会想了解接触其他部分的一个实现思路,提高对项目的整体把握。
- 还不够有远见,决策力还不够
- 我觉得一方面是自己的经验有限,视野还不够开阔
- 另一方面自己可能性格原因,有时候会不够果断,但我也有一直的改善这一点
- 比如去担任一些学生干部,
- 提高自己分析和解决问题的能力,让自己去多经历一些事情,让自己的经验和看问题的角度更加丰富。
未来有什么规划
- 我希望在最开始的的几年,可以深耕某个领域研究和学习,同时逐步补各方面的能力和理解,比如产品方面,设计方面等,自己对于设计方面也是比较感兴趣的,平时也会看一些国外设计网站上的一些作品,提高自己审美能力
- 我之前了解到我们公司目前的相关业务的内容,我也是有很大的兴趣和期待能参与到其中学习,希望可以跟团队共进步,在提升自己能力的同时,也能和其他的前辈和小伙伴去开发更多优秀的项目,来为公司创造更多的利益。