前端工程师招聘要求对数据结构与算法要求高吗

The page is temporarily unavailable
nginx error!
The page you are looking for is temporarily unavailable.
Please try again later.
Website Administrator
Something has triggered an error on your
This is the default error page for
nginx that is distributed with
It is located
/usr/share/nginx/html/50x.html
You should customize this error page for your own
site or edit the error_page directive in
the nginx configuration file
/etc/nginx/nginx.conf.前端工程师是一个无关紧要的职位吗?
看了知乎上这么多讨论关于前端这个职位的问题, 什么关于前端难不难, 好不好找工作, 有没有用, 好不好学, 好不好转其他的职位, 待遇好不好等等的问题, 想谈谈自己对前端的看法.到底所谓的前端都应该干些什么都应该会写什么呢? 本人身边有太多的人会切几张图, 会用jQuery做个特效, 会从bootstrap里复制粘贴, 会用html游戏框架写个flappy bird, 会在Github里找各种模板自和库拼拼凑凑, 就口口声声大言不惭的称自己为前端工程师. 说什么前端好简单啊, 前端找工作好难啊, 没有出路啊, 想转行啊. 甚至有更多的人还不明白什么是HTML, 就到处问(知乎里尤其多)怎么开始学前端啊, 前端前景好不好啊. 依照本人的经验, 什么东西难不难, 什么东西好不好, 可不是这样问出来的. 我相信在这在这种网络信息资源及其丰富的年代, 花个半小时自行搜索一下你应该可以得到你想要的答案.好了言归正传, 前端工程师真的是一个无关紧要的职位么? 我们先来看看前端工程师都要做些什么, 看看那些称自己是'所谓'的前端同学们都能走到哪一步.这里直接跳过最基本的HTML+CSS+JS, 包括但不仅限于:- HTML各种element怎么用什么时候用?- Event? EventLitsener? HTML中触发event以及JS中处理event?- DOM tree? 添加? 修改? 删除? 搜索? 遍历? 选择? children? parent? sibling?- 什么是window? 什么是document?- JS基本语法? function? loop&condition? scope&closure? array&object? this?- CSS 什么是box modal? position? float? 各种选择器(*, &, ~, :nth-child)? 如果看到这里有任何一项完全没听说过没用过, 或者查各种文档后'大概'知道怎么用的同学们, 很遗憾, 你们现在算不上是一个合格的前端工程师. 如果不是, 请继续.### 程序员的基本素质和知识(有些人觉得前端不同于传统意义上的程序员, 这点我十分不赞同. 或许把前端工程师叫做JS程序员更加贴切, HTML和CSS就好比其他语言中的UI库)-- 高数, 基本的概率统计 (连简单的微分方程都不会解的朋友们就不要称自己为前端人员了!)- 基本数据结构 能用JS写出linked list, stack, queue, (binary)tree, graph, hashtable么?- 基本算法 能用JS实现各种search(linear, binary..), 各种sort(bubble, insertion, merge, quick, selection), 以及树的搜索(Breadth First/Depth First)和遍历(3种顺序)么?- 设计模式 知道什么是singleton, factory, strategy, decrator么?- Git 不要只是停留在把Github当做一个网络储存器的层面上, 知道branch, diff, merge么?- 基本的英语能力(不要求听说, 只用来读/写文档资料)- 基本的计算机知识 知道位运算, 溢出, thread, lock, concurrency, parallelism么?- 熟悉unix的基本命令么? 知道ssh public/private key都是干嘛的么?- 知道正则么? 能够熟练的使用么?- 能写出详细的注释/文档, 让阅读你代码的人知道你要干嘛么? 能短时间内快速地读懂来自你同事或者其他地方(github, blog)的代码, 知道什么东西应该写在什么地方, 以便迅速地参与其中么?- 给你一个你从来没有接触过的库/语言, 能能够在较短的时间内在你的代码里正确使用么?- 有一个得心应手用的熟练地编辑器/IDE么? 不要求大家都是vim/emacs大神, 但也不要做什么都是用鼠标来点.- 基本的检索查询能力(google, stackoverflow, MDN)- 单独思考解决问题的能力, 团队合作, 与人相处如果以上的内容都有所了解(这里不会强调精通), 恭喜你, 你拥有了成为前端工程师的基础知识. 继续.### 前端专业知识- 知道什么是AMD, COMMONJS么? 知道call, apply, bind么? 知道JS中foreach, filter, some, every么? 知道怎么实现functional JS(curry等)么?- 知道各种所谓的高级HTML的API(File, Web Audio, WebSocket)么?- 知道各种CSS Preprocessors么? 能讲出他们各自的优点和缺点么? 熟悉并且会用其中的一种么?- 知道各种CSS框架么? 能讲出他们各自的优点和缺点么? 熟悉并且会用其中的一种么?- 知道canvas, SVG么?- 知道怎么把你的东西做成responsive, cross-browser support么? - 知道什么是SEO并且怎么优化么? 知道各种meta data的含义么?- 知道什么是Ajax, restful, get, post么? 知道怎么和后台交互么?- 知道各种JS框架(Angular, Backbone, Ember, React, Meteor, Knockout...)么? 能讲出他们各自的优点和缺点么? 熟悉并且会用其中的一种或多种么?- 知道什么是webkit么? 知道怎么用浏览器的各种工具来调试和debug代码么?- 知道现在前端一般的工作流程(gulp, grunt, git, svn, npm)么?- 知道怎么测试代码么? 知道BDD, TDD, Unit Test么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)?- 知道前端templating(Mustache, underscore, handlebars)是干嘛的, 怎么用么?- 知道npm, V8, node, express, socket么? (这里补充一点, 现在越来越多的公司都采用: '前端网页 -& 前端后台 -& 后台'这种构架来搭建东西, 也就是说, 前端工程师不仅要做传统前端的网页, 还要写自己的后台, 来跟真正的后台进行交互, 至于前端的后台用什么语言来写, 一般是node/python/ruby, 不太会用到庞大的java, 所以这里我把node列为前端工程师必须要掌握的技能之一) 知道cache, authentication么?- (如果要用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?- 另外, 前端这个行业跟传统的c/c++/java程序员还是有一定的差别的. 由于是新兴产业, 所以各种行业标准, 框架, 库会随时随地的产生和更新 (作为一个c程序员, 十年前怎么写东西现在还是怎么写东西). 今天出了node和react, 明天又出了io和mean. 所以, 积极关注各种前端产品, 跟上变化的节奏, 也是身为一个前端程序员必备的技能之一. 知道ECMAScript 6里怎么写class么? 知道react, flux, reflux么? 知道polymer, dart么? 知道meteor么?(暂时能想到的就这么多, 待补充..)在从包括google, facebook, apple等各大公司的面试, 以及周围做前端小伙伴们的经历中, 发现现在在美国, 没刷过3, 4遍cc150和leetcode的同学们都只敢投投简历不敢去面试, 因为觉得铁定过不了...附上一些之前亲身经历的面试题:#### Facebook 1: Puzzle MaterialsGiven a set of events, render the events on a single day calendar (similar to Outlook, Calendar.app, and Google Calendar). There are several properties of the layout:1. No events may visually overlap.2. If two events collide in time, they must have the same width.3. An event should utilize the maximum width available, but constraint 2) takes precedence over this constraint.Each event is represented by a JS object with a start and end attribute. The value of these attributes is the number of minutes since 9am. So {start:30, end:90) represents an event from 9:30am to 10:30am. The events should be rendered in a container that is 620px wide (600px + 10px padding on the left/right) and 720px (the day will end at 9pm). The styling of the events should match the attached screenshot.You may structure your code however you like, but you must implement the following function in the global namespace. The function takes in an array of events and will lay out the events according to the above description.function layOutDay(events) {}This function will be invoked from the console for testing purposes. If it cannot be invoked, the submission will be rejected.In your submission, please implement the calendar with the following input:[ {start: 30, end: 150}, {start: 540, end: 600}, {start: 560, end: 620}, {start: 610, end: 670} ];FAQAre frameworks such as JQuery, MooTools, etc. allowed?
Yes, but please include the file with your source code.Is there a maximum bound on the number of events?
You can assume a maximum of 100 events for rendering reasons, but your solution should be generalized.What browsers need to be supported? Your solution should work in all modern standards-compliant browsers.Does my solution need to match the image pixel for pixel? No, we will not be testing for pixel matching.How will you be testing my solution? We will be running tests from the browser console by invoking the layOutDay() function. Your solution should not require a local web server (e.g. run from localhost) or have any other dependencies besides your html/css/js.#### Facebook 2:Question: How would you flatten an array in JavaScript?Answer: flatten of an array means, if one or more array elements are also array, you will took out those elements and you will have a plain array. For example, if you if array is like [1, 2, [3, 4], [5, [6, 7]], 8] your flatten array would be [1, 2, 3, 4, 5, 6, 7, 8]#### APPLE: Given a node from a DOM tree find the node in the same position from an identical DOM tree.#### Google 1:Question: How would you flatten an array in JavaScript?Answer: flatten of an array means, if one or more array elements are also array, you will took out those elements and you will have a plain array. For example, if you if array is like [1, 2, [3, 4], [5, [6, 7]], 8] your flatten array would be [1, 2, 3, 4, 5, 6, 7, 8]#### Google 2:Alex is standing on the top left cell (1,1) of a n*m table. The table has n rows and m columns. Initially, he is facing its right cell. He moves on the table in the following way: &He moves one step forward. &He turns to his right &While moving forward, if he would go out of the table or reach a visited cell, he turns to his right. He moves in the table as much as he can. Can you find out the number of cells he visits before he stops? For example, given a 9x9 grid, the following would be his moves. The number on each cell represents the step he would land on that particular cell. 1 2 55 54 51 50 47 46 45 4 3 56 53 52 49 48 43 44 5 6 57 58 79 78 77 42 41 8 7 60 59 80 75 76 39 40 9 10 61 62 81 74 73 38 37 12 11 64 63 68 69 72 35 36 13 14 65 66 67 70 71 34 33 16 15 20 21 24 25 28 29 32 17 18 19 22 23 26 27 30 31 Input: The first line of the input contains two integer numbers n and m. n and m are between 1 and 100. Output: Print an integer to the output being the answer of the test. Sample input #00: 3 3 Sample output #00: 9 Sample input #01: 7 4 Sample output #01: 18从这些面试题可以看出的是, 前端工程师也是程序员, 面试同样逃不出各种算法和数据结构的问题, 同时还会被问很多前端专业领域的东西, 引用Facebook HR给我发的一封邮件中的一句话: The primary technical focus of these interviews will be JavaScript, HTML, and CSS, but at Facebook we are software engineers first, and web specialists second. This means that there may be a sufficient amount of focus on general computer science concepts like algorithms, design patterns, data structures, etc. (翻译: 技术面试的主要会集中在JS, HTML和CSS. 但是在Facebook, 我们首先应该是一个软件工程师, 其次才是web的专业人员, 这意味着相当大的一部分面试会涉及到cs的知识比如算法, 设计模式和数据结构等等.)另外想到一个之前面试Amazon的一道题, 觉得特别好. 写出来跟大家分享(大神们见笑了~):问题: swap two integers without temp (交换两个整数, 不能用任何临时变量)一般答案是这样的:function swapNumb(a, b){
console.log('before swap: ','a: ', a, 'b: ', b);
console.log('after swap: ','a: ', a, 'b: ', b);
& swapNumb(2, 3);
a: 2 and b: 3
a: 3 and b: 2
如果你这么写面试官会喜欢你:function swapNumb(a, b){
console.log("a: " + a + " and b: " + b);
console.log("a: " + a + " and b: " + b);
& swapNumb(2, 3);
a: 2 and b: 3
a: 3 and b: 2
所以, 那些成天'所谓'的前端工程师们(只是针对某些朋友), 请不要再误导即将或者想要跨入这个行业的新同学们了. 那些想要涉及前端行业的同学们, 首先不要觉得跟其他语言程序员相比前端的门槛低, 更不要觉得前端是一个可有可无的存在. 前端(程序员)挣得多待遇好, 因为我们值这个价钱. 如果羡慕或有兴趣就请努力学习思考然后加入这个圈子里来.连一个花10秒钟google(baidu)一下就能知道答案的问题都要拿到知乎上来问的朋友们, 请不要毁了知乎这么好的一个平台, 另外那些什么东西都'大概明白'的朋友们, 请不要在以一个前端工程师的视角来说一些'毫无意义'的话.咦, 气氛突然严肃了, 哈哈哈, 以上内容不针对任何人, 随便吐槽两句, 如果有不对的地方和不妥当的内容请指正, 谢谢!
从0到0.1从0.9到1前端工程师都能帮你满足
没有无关紧要的职位, 只有无关紧要的人.酱油的后端也不在少数... 保持竞争力,不要妄自菲薄,
但是也不要抱着那些所谓的前端技能树自我满足。我能想到几个让PO主燃起来的例子:1. 搜一下Threejs,PhiloGL的DEMO, 你应该会感叹:“前端好牛逼,可以用canvas做这么炫的东西”.
在振奋之余, 你要看清的真正起决定性作用的是那些牛牛们的 计算机图形学基础和GL的相关经验. canvas仅仅只是容器, 那些API的学习成本真的无足挂齿。2. 当你看了D3.js,你会发现, 数据可视化也完全可以在Web前端实现, 我们好牛逼.
但是仍然要泼盆冷水, 建议你去看看D3.js发展的完整历史.3. 当你看其它开源使用esprima.js 分析javascript, 或是使用jison来实现自己的解析器、编译器时,你会发现编译原理这个看似和前端八竿子打不着的东西, 现在也越来越紧密了起来。但是jison还是bison,它们真的区别不大,仅仅只是使用javascript实现而已。所以涉及到基础知识领域区分度要远大于某个语言或平台。
好在是目前前端能容纳的知识领域越来越广,这将需要由更专业的人来完成工作,
所以我们的路还可以走的很长。 综上所述,那我们现在就讨论前端是不是无关紧要的职位是不是太早了点
How dare you!
就我的理解而言,前端的重要性并不在于 @haochuan 所提到的各种知识栈,因为细枝末节地说起来,每个技术岗位总有各种难点,不足为证。况且难和重要之间,我总觉得还是有些差距的。在我看来,“前端”——不精确地可以定义为所有直接和用户打交道的关节,是用户感知到这个网站对自己诚意的直观反映。就像一个人长得漂亮,你或许就愿意多看两眼。慢慢聊着觉得原来这人太肤浅,是个银样蜡枪头。但反过来,如果这人长得很丑,即使拥有一颗美丽的心,恐怕愿意去了解的人也实在是需要一些慧眼的。所以,前端工程师做的事,就是用有诚意的第一印象,尽可能多地给用户了解网站更多内涵的机会。要严格追究起来,当然每个职业都重要,否则也不存在这个职业了,这么讨论就没意思了。我这里说前端重要,是说它的确值得被关注被重视。网页刚刚诞生的年代,用户只关心内容。后来,网页样式作为辅助有效阅读的工具被采纳,用户觉得“哦,加粗的地方是站长想强调的”,但他们并不在意网页有多“好看”。再后来,平面设计师把他们的经验借鉴进来,用户惊讶地发现原来网页也可以有品味的差别。网页设计风格亦如巴黎当季服装设计风格那样潮起潮落,人们开始把“现在流行 material design 啊”这样的话挂在嘴边。不仅如此,随着 T 台上一次次奇装异服的发布会,观众开始意识到衣服可以有声音,可以有味道,我们的网页也终于变得几乎无所不能。这是一个从原始人吃生食,到发现了火,吃上熟食,再慢慢学会用佐料进行烹饪的过程。在吃不饱饭的年代,当然没人在意豆腐脑是甜的还是咸的好吃。然而人类这种永远不会满足的生物,吃饱了撑的自然要对饮食提出更高要求,进行更多探索。近年来“前端工程师”越来越受到重视,难道不正是这种“仓廪实而知礼节,衣食足而知荣辱”的进阶追求吗?至于说优秀的前端工程师难找,我想说(来找我啊~)不是因为低头写代码的人太多,抬头望星空的人太少;而是这两件事都做的人太少。或许每个行业的人都会把自己做的事说得很重要是一个不争的事实,更何况程序员又格外偏好“改变世界”那一套(虽然作为道家思想拥护者的我是很反对的)。前端很重要,它决定了用户看不看;网站内容本身更重要,它决定了用户看多久。把前端说成是网站的“包装”或许有些自降身价,但我觉得倒也不失为一个很好的比喻:只有当你的产品本身是高大上的,恰到好处的包装才会让其锦上添花;反之,如果产品本身是个空壳子,却妄图通过包装令其脱胎换骨,那么,或许前端是没什么用吧?
既然存在就有必要,因为相应的,后端工程师会依赖你的工作,期待你的成果能够让他专注于业务与存储逻辑的实现;设计师会与你沟通,询问某某效果能否实现,期望你的成果能助力他们的设计。但是假如项目很小、公司不大,依赖文艺复兴工程师们的自由发挥,区分前后端工程师就毫无意义了。抛开情境讨论问题真是没意思啊…
一个职位重要不重要,更合理的判断是看这个职位的产出,对于产品当前的目标达成有多大的贡献。这个判断对于任何职位都适用。哪怕是同一个公司、同一个产品,在不同的发展阶段,职位的重要性也是会变化的。所以,最关键的是自己在做职业发展抉择时,找到最能够发挥和体现自身价值,能够帮助产品达成关键目标的职位。
html文档编辑员是无关紧要的职位,前端工程师不是。
你问了一个哲学问题,我没法从前端技术的角度回答你。但这让我想起一位“前端工程师” ,。一名 19 世纪的印刷匠、书籍装帧师,Doves 字体的创造者。我一直都觉得前端工程师与排版工作者很相似,只是应用场景不一样的另一种称呼吧。在 1916 年的 8 月到 1917 年的 1 月这段时间,Cobden-Sanderson 持续地在哈默史密斯桥(Hammersmith Bridge)西侧丢弃 Doves 字模。 他只在黄昏后进行这项活动——从酒馆半英里外的装订所出发,前后花了约 170 次,丢弃的金属活字总量多达 1 吨。起初,他将整页的活字矩阵投入河里。渐渐地,他像喂鸟一般将字模从口袋里一个一个丢出。后来,他找到了一个带滑盖的小木盒,自己用胶带做了把手,能很好地将活字撒入水中,同时又不易被路人察觉。这个犯罪般的举动,一方面出于私人怨恨—— Cobden-Sanderson 不想让字体落入 Walker (他的搭档) 的手中;另一方面则出于他对手工艺的热爱之情——使用 Doves 的书可能不再是自己精心印制的,只要想象一下这种情况他就十分痛苦——这同样也因为他对当时的新技术及生产变革非常厌恶。Cobden-Sanderson 痛恨机器化的工业生产方式,在日记中也曾写下:只有将字体交给泰晤士河,它们才永远不会被“不用人的手和胳膊印刷的出版社”所使用。[1]对于多数人来说,不曾听说过这套字体,也辨认不出字体间的区别。在他们眼里,Cobden-Sanderson 所作作为,是无关紧要的。可对于 Cobden-Sanderson 本人,那是他智慧的灌输,努力用系统知识所创造的美好事物。前端工程师是无关紧要的职位吗?更多时候是非此领域内的人得出的评价,他们的眼里不过是一个页面,一堆可点击的超链接。可是在一位职业的前端工程师眼里,文字排版中所运用「音阶」、「节拍」等韵律,以及为了更快的加载时间,所进行的性能压榨。其中的乐趣,不为外人所感受,仅有自身沉浸在其中。所以无关紧要,其实取决于你是否用智慧灌输,并努力用系统知识创造美好事物。[1]:
说点别的,何必把自己局限在"前端"二字里,另外,又何必过分纠结"前端"的边界,需要的不过是各种限制因素下作权衡把事情解决的储备罢了。
已有帐号?
无法登录?
社交帐号登录更多公众号:doden301记录东小呆学习前端的酸甜苦辣,也会分享一些前端的知识和热点资讯。最新文章相关推荐对这篇文章不满意?您可以继续搜索:百度:搜狗:感谢您阅读我对前端开发的看法,本文可能来自网络,如果侵犯了您的相关权益,请联系管理员。QQ:

我要回帖

更多关于 高级前端工程师要求 的文章

 

随机推荐