[关闭]
@alexhuang 2016-09-14T01:43:19.000000Z 字数 7327 阅读 1298

经验

未分类


前端面试,阿里。

Ajax 和后台交互。
有个问题:
gdal这类dll可以直接用在server端。然而依赖gdal.dll的模块暂时无法 在server端成功运行。有以下几种原因,IIS没有权限获取gdal所依赖的dll,IIS并未设定在32位CPU下运行。

研究所面试,后端开发问题:
对委托的理解 Delegate (代理)
面向对象编程的理解,多态与接口。
软件开发的流程: ???

戴尔GUI笔试题

计算div在page中的绝对坐标,垂直水平布局
什么是闭包
OSI七层模型

closure 实现了

  1. function f1(){
  2. var n = 999;
  3. nAdd = function(){
  4. n += 1;
  5. }
  6. function f2(){
  7. alert(n);
  8. }
  9. return f2;
  10. }
  11. // result refer to f2.
  12. var result = f1();
  13. result();
  14. nAdd();
  15. result();
  16. //匿名函数包装不想暴露的变量
  17. //tabview.js.
  18. (function(){
  19. var abc = 5;
  20. function TabView(cfg){
  21. this.a = cfg.a;
  22. this.b = cfg.b;
  23. }
  24. //这是一个简单的闭包。
  25. TabView.prototype = {
  26. c :function(){abc++;console.log(abc);},
  27. d :function(){abc--;console.log(abc);}
  28. }
  29. // 通过这样的做法,将TabView类暴露。变量和方法通过类来调用。。
  30. window.TabView = TabView;
  31. })()
  32. var cfg = {a:11,b:22};
  33. tab = new TabView(cfg);
  34. tab.a --> 11
  35. tab.c() --> 6 //实现了闭包,通过内部函数打印出了abc。在匿名函数执行之后 Tabview 函数还在内存中,匿名也没有消失,所以abc的值还可以操作。
  36. //模块化和require.js( define 和 require方法 )
  37. //定义模块mod1.js
  38. define(function(){
  39. return {a:1};
  40. }
  41. //定义mod2.js
  42. define(['mod1'],function(m1){
  43. var a,b=2,c=3;
  44. a = c*m1.a;
  45. return {a:a,b:b};
  46. });
  47. //js程序从require开始执行
  48. //main.js
  49. require(['mod2'],function(m2){
  50. alert(m2.a*m2.b);
  51. })
  52. //index.html 在html通过require.js来加载执行所有js文件,require会加载main所依赖的所有项。
  53. <script src="js/require.js" data-main="js/main"></script>
  54. //window自带弹窗的问题:阻塞进程。用模块化实现
  55. //window.js
  56. define(['jquery'],function($){
  57. function Window(){}
  58. Window.prototype = {
  59. alert:function(){},
  60. confirm:function(){},
  61. prompt:function(){}
  62. }
  63. return {
  64. Window:Window
  65. }
  66. //export Window类。
  67. });
  68. //main.js
  69. require.config({
  70. paths:{
  71. jquery:'jquery-1.11.0.min.js'
  72. }
  73. });
  74. require(['jquery','window'],function($,w){
  75. $("#a").click(function(){
  76. new w.Window().alert();
  77. });
  78. });

百度面试题

主要涉及到鼠标事件,获取对象在浏览器中的位置属性(left,top),鼠标点击的位置(clientX,clientY),跟踪mousemove事件的位置,实时计算div的位置变化和偏移。
原生js做过哪些东西? 鼠标拖动div,移动端优先大图浏览。。。

判断变量数据类型的方法
考察JS基本类型,事件代理(delegate实现过程),为啥要用代理,解决兼容性,IE和FF等事件绑定的差异??,
模块化 requireJs,如何动态加载js
写代码:
可复用的事件绑定函数,并且控制事件捕捉。

  1. var alertgreen = function(){
  2. alert("you click green");
  3. }
  4. function addEvent(element, evnt, funct){
  5. if (element.attachEvent)
  6. return element.attachEvent('on'+evnt, funct);
  7. else
  8. // capture 设置为true ,就是事件按照 捕捉形式传递??
  9. return element.addEventListener(evnt, funct, true);
  10. }
  11. function cancelPropagation (event){
  12. event = window.event||event;
  13. if( document.all){
  14. event.cancelBubble = true;
  15. }else{ event.stopPropagation(); }
  16. }
  17. addEvent($('.btn-green')[0],"click",alertgreen);
  18. // 对于同一个 button,先执行该执行的函数,再执行cancel函数,由此第一次click会触发 cancel,阻止传递!!!
  19. addEvent($('.btn-green')[0],"click",function(evt){cancelPropagation(evt)});

原型继承,扩展。
数组洗牌(遍历数组,循环内用随机数生成一个索引,交换两个数),数组去重复。

网站优化:
压缩css,js,合并文件(sprite),合并请求。利用缓存
缓存的问题:
第一级,浏览器缓存,最省资源的一种,减少请求(用header控制,expire,Etag,max-age)
第二层级,CDN缓存-静态页面, proxy缓存(动态页面,代理服务器支持缓存,Nginx,Apache,直接读缓存,都不需要执行动态脚本,使用方法:配置proxy_cache)
第三层级 文件缓存,分布式缓存(memcache,redis搭建集群)详情

彭晨贡献的百度三面题

JS:闭包?,数组操作,异步?(哪些地方用到异步了);
HTML&CSS:position,display,css hack,HTML5新特性,语义化,存储,cookies和session,两列三列布局,水平垂直居中,盒子模型;
其他:输入URL浏览器和服务器发生什么(考了三次!),前端性能优化(同样很重要!),打包,HTTP状态码

PC贡献:滴滴前端面试:
一面
基础知识:原型链,闭包,事件模型
toString和ValueOf区别
实现一个动画效果,圆球先加速移动,然后匀速移动
页面没有加载成功怎么办
性能优化
项目中遇到了哪些问题

二面
CSS3的高级特性有哪些
CSS实现动画效果
使用CSS3实现一个钟的动画
AngularJS和JQuery什么区别,分别是什么思想?
移动端和PC端自适应的问题,怎么解决的?
实现一个3列布局,第一列50%,第二列和第三列分别是25%(百分比,表格,flexbox...其他的没有回答出来)
项目中遇到的什么难以解决的问题,怎么解决的

三面(HR面)
为什么要来滴滴?和一些国企和外企有什么区别?

在拉取到文档资源(document)后,需要构建dom树,并且开始渲染dom(这个时候样式文件可能还没有生效),在渲染之前浏览器还要知道html文档是什么编码的,可以在以下几个地方指定:
    HTTP 协议中
    <meta> 中的 charset 属性值

jQuery如何工作:

原生JS中选择dom元素,注册事件,方式很多。。在jQuery或者其他js库中做了许多封装,例如jQuery中用 $('#btn-canvas').on('click',function(){ // do something! }); Dom 2 level 的注册方式比如 addEventListener 相比在html里面直接写 可以对同一个事件多次响应,而不是覆盖前一个响应函数。 。

  1. //jQuery 的一些api
  2. $htmlCanvas.css({'width':100px,'height':50px});
  3. $canvas.attr('width', pixelWidth);//设置元素属性
  4. $form.on('submit', function formSubmit(evt) {
  5. evt.preventDefault();
  6. changeHash("");
  7. });
  8. $('#btn-save').on('click',function save(evt){
  9. var url = $canvas[0].toDataURL();
  10. if('download' in document.createElement('a')){
  11. this.href = url;
  12. }else {
  13. evt.preventDefault();
  14. window.open(url,'_blank','width=500,height=300,menubar=yes');
  15. }
  16. });
  17. //用构造函数声明对象
  18. function Tune(song,artist){
  19. //只有通过this.name = song 才能将属性绑定到对象,供外部操作调用。
  20. var title = song;
  21. var artist = artist;
  22. this.getTitle = function(){
  23. return title;
  24. }
  25. }
  26. window.onload = function(){
  27. var hsong = new Tune("greeting","alex");
  28. Tune.prototype.newAtt = function(categoryName){
  29. this.category = categoryName;
  30. }
  31. }
  32. function newTune(song,artist,date){
  33. var date = date;
  34. this.getDate = function(){
  35. return date;
  36. }
  37. Tune.apply(this,arguments);
  38. this.getTuneParam = function(){
  39. return this.getTitle()+" was published in "+ this.getDate();
  40. }
  41. }
  42. window.onload = function(){
  43. newTune.prototype = new Tune();
  44. var t1 = new newTune("greeting","alex","1999");
  45. }
  46. //apply 是继承于Function的方法,函数内部有两个特殊对象,arguments 类数组对象(有callee属性),callee属性是指针,指向拥有arguments对象的函数。
  47. //so:
  48. function facto(num){
  49. if(num<=1){
  50. return 1;
  51. }else{
  52. return num*arguments.callee(num-1);
  53. }
  54. }
  55. // 除了arguments,this引用的是函数执行的环境对象。
  56. // 除了递归,可用循环实现. 输出fibonacci数列的第 n 项
  57. function fibonacci(n){
  58. var arr = [0,0,1];
  59. if( n<3) return arr[n];
  60. else{
  61. for(var i = 3; i<=n;i++){
  62. arr[i] = arr[i-1] + arr[i-2];
  63. }
  64. return arr[n];
  65. }
  66. }

大图列表展示:

主要是如何布局,一排四张图片,保持padding=2,计算 picWidth

  1. <style>
  2. .img-container li {overflow:hidden;float:left;}
  3. .large{width:100%;height:100%;position:absolute;top:0px;left:0px;background-color:black}
  4. </style>
  5. <ul class="img-container clearfix" id="container">
  6. </ul>
  7. <div class="large animated fadeInDown" id="large_container" style="display:none;">
  8. <img id="large_img">
  9. </div>
  10. <script>
  11. var render = function(){
  12. var tmpli = "";
  13. var winWidth = $(window).width();
  14. var picWidth = Math.floor((winWidth-padding*3-scrollBarWidth)/4);
  15. for(){
  16. //生成图片列表
  17. tmpli += '<li data-id="i" class = "" ><img src ="img/'+i+'.jpg"></li>';
  18. }
  19. $("#container").html(tmpl);
  20. }
  21. render();
  22. //写一个load大图事件
  23. var cid;
  24. var wImage = $("#large_img");
  25. var domImage = wImgae[0];
  26. var zWin = $(window);
  27. var loadImg = function(id,callback){
  28. $("#container").css({heigth:zWin.height(),'overflow':'hidden'});
  29. $('#large_container').css({
  30. width:zWin.width(),
  31. height:zWin.height()
  32. //top:$(window).scrollTop()
  33. }).show();
  34. var imgsrc = 'img/'+id+'.large.jpg';
  35. var ImageObj = new Image();
  36. ImageObj.src = imgsrc;
  37. ImageObj.onload = function(){
  38. var w = this.width;
  39. var h = this.height;
  40. var winWidth = zWin.width();
  41. var winHeight = zWin.height();
  42. //检测load 的图像宽高,如果是竖立的,则对height设定winHeight,width自动。
  43. }
  44. }
  45. //jQuery 的事件绑定 bind live delegate 。 为什么用delegate,因为可能存在li还没有生成,我事先需要绑定事件。delegate 是对父元素进行绑定,这是性能较好的做法。delegate函数的几个参数(selector,evttype,callback).
  46. $('#container').delegate('li','tap',function(){
  47. //获取当前tap 的li,拿到data-id属性,传递给loadImg函数
  48. var _id = cid = $(this).attr('data-id');
  49. loadImg(_id);
  50. });
  51. //隐藏大图
  52. $('#large_container').tap(function(){
  53. $('#container').css({height:'auto','overflow':'auto'})
  54. $('#large_container').hide();
  55. });
  56. //
  57. $('#large_container').mousedown(function(e){
  58. e.preventDefault();
  59. });
  60. // 题外话: JQuery把alert函数绑定到$(document)元素上,并使用’click’和’a’作为参数
  61. $('a').live('click', function() { alert("That tickles!") });
  62. </script>

基于公司产品与平台二次开发。编写所属模块的设计配置文档。
熟练掌握 C# ,熟悉VS,熟练掌握JavaEE ?? 掌握html、ajax。 熟练掌握SQL server,复杂的存储过程,sql编写和调试??
熟练掌握git??? 面向对象分析设计能力,uml表达软件设计思路和软件架构??UML 概念??
SOA架构??
只用过server。。

面试准备

从个人经历来看,研究生期间所做的项目以及找工作过程中所做的准备很重要。
第一就是研究生期间所做的项目,包括科研项目和系统开发项目。科研项目即涉及到科学数据处理,预处理、统计分析,算法实现等等,不要以为科研过程对于找工作没用。例如出租车数据的预处理,地图匹配的实现(泰为),OD的提取。R软件、Matlab的运用,对于数据分析的岗位都有加分。

第二是找工作过程中的准备:包括制作更新简历(根据职位描述完善),做题保持智商(根据笔试内容重点刷,总结解题思路),网申合适的岗位(看花眼,广撒网or定点),面试技巧(准备面试材料,技术基本概念,阐述项目经历,讨论项目细节)

简历制作:不用多说,直接找个例子说。

笔试面试,微软题很难,算法类,需要逻辑思维能力很强,实现能力很强,锲而不舍的精神,至少4、5轮。百度笔试题不难,面试层层递进,至少三轮技术面,需要对问题深入的理解,刨根问底。阿里题不难,但是没过。。
GIS类别的公司,问项目经验,泰为:道路交通相关的,拓扑、地图匹配、数据简化、数据库SQL,与专业紧密相关,需要一定的语言基础和能力;
不要随意放弃笔试的机会,在招聘季合理安排在校学习和外出面试的时间。和导师沟通好科研学习和找工作之间平衡。
保持学习状态、笔试、面试状态,做题,更新简历,强化基础知识

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注