昨天(2018.3.21)去面试的,然而一面fail了,记录一下,希望自己接下来更认真的学习吧。
下面前五道题是笔试部分,后面的是面试部分。笔试部分比较基础,面试部分几乎都是webGL、Threejs、图形学相关的东西。说实话,我是2017年七八月份看了一遍《WebGL编程指南》,主要是为了理解Threejs的内部机制,看完之后也没有用GLSL写过Shader,当时感觉Shader好难。而且我一个计算机科学与技术专业的孩子,的确看不懂图形学里面的一些东西,很吃力。用Threejs比较多。2017年十一月份之后就没怎么写js的,遗忘的比较严重,最近在重温《javascript高级程序设计》,感觉像是从头开始了。
1用CSS实现上下左右居中。
<style type="text/css"> body{ margin:0;/*上右下左*/ padding:0; width:100%; height:100%; } /*上下左右居中,ok*/ .box{ width: 100px; height: 100px; position:absolute; left:0; right:0; top:0; bottom:0; margin:auto; background-color: #3FAD72; } /*上下居中*/ . box1{ position: absolute; top: 50%; height: 200px; transform: translateY(-50%);/*不知道高度的情况下可以用这一行代码*/ /*margin-top: -100px; negative half of the height 知道高度的情况下,可以替换上面哪一行*/ background-color: #3FAD72; }
/*左右居中*/ .box2{ position: absolute; left: 50%; width: 200px; margin-left: -100px; /* negative half of the height */ background-color: #3FAD72; } </style>
2用观察者模式实现事件listener和trigger
https://www.cnblogs.com/aoguren/p/4680692.html
因为我不大了解观察者模式,就写了自己熟悉的两种事件监听方式。
3介绍几种JS的跨域机制和原理
http://blog.csdn.net/kongjiea/article/details/44201021
我写的是jsonp,ajax和websocket。
4,找出字符串中出现次数最多的字符,JS写个函数
<script type="text/javascript"> function charNum(){ var str = "zhaochucichuzuiduodezifu"; var o = {}; for (var i = 0, length = str.length; i < length; i++) { var char = str.charAt(i); if (o[char]) //char就是对象o的一个属性,o[char]是属性值,o[char]控制出现的次数 o[char]++; //次数加1 else o[char] = 1; //若第一次出现,次数记为1 } var max = 0; var maxChar = null; for (var key in o) { if (max < o[key]) { max = o[key]; //max始终储存次数最大的那个 maxChar = key; //那么对应的字符就是当前的key } } console.log("最多的字符是" + maxChar); console.log("出现的次数是" + max); } </script>
5用JS实现isprime,写个函数
<script type="text/javascript"> function isPrime(){ var num = 100; for(var i=0;i<Math.sqrt(num);i++){ if(num%i == 0){ console.log('false'); return false; } } console.log('true'); return true; } </script>
面试题:(一个小时)
6.threejs组成一个场景需要上面元素?
7.threejs中怎样让一个物体不受光照的影响。
方法1:设置环境光为白色,emmissive也为白色。
方法2:设置其他光线与物体的夹角为0.,怎么计算法向量?怎么计算夹角?
8.webGL中,生成一个模型,比如立方体,八个顶点各自都是三个面公用的,怎么计算?
9.讲讲片元着色器和和顶点着色器,以及一个object的渲染过程。
10.怎么把屏幕坐标系转换为webgl坐标系?世界坐标系、本地坐标系、视觉坐标系之间的转换方法?还有什么坐标系?
11.threejs的raycaster的原理是什么,除了intersect[ ]数组之外还会返回那些值?
12.怎么优化3D页面的加载或者渲染速度?加载不出来怎么办?
13.讲一下自己了解的js设计模式。
14.webgl怎么生成一个模型?具体怎么实现?怎么定义坐标?index?着色器?
15.3D裁切是什么?
16.一个三维立方体其实都是由三角形拼起来的。
最后面试结束的时候,我问了一下,的确他们组需要熟悉WebGL的前端,因为我了解,所以简历直接推到了这边,现在想想,也不能确定直推就是好事情。这样提醒了我,简历上不能啥都写呀。
的确,面试结果就是 fail 了,额,不知道怎么评价这次的面试。可能我简历上写了WebGL的内容,然后面试官就问的多了些,可是宝宝真的都忘记了(捂脸)。毕竟自己没有用过只看过的东西在脑海里面也不会存在太久(就这样安慰自己)。不过 BAT 我只投了腾讯,虽然结果不好,但也能接受,毕竟是我太渣渣。
我还会继续面试其他公司的,虽然渣,可是还是的多面试多总结多学习,看清自己,前进……