主页

0

实习招聘面试经历-4

(啪啪啪,之前写完文章写了一半不知怎么就忘记继续发=。= 现在是8/2,文章大概是一个多月前写的)终于到最后一篇啦。虽然技术面试早就结束了,不过还是前个星期接到最后一家的Hr的电话,因为已经确定去哪一家了所以就拒绝了。至此所有的面试都结束啦~结果还是挺不错的。 总结一下最后一家的面试,电面,周日早上10点开始,每轮40分钟左右,最后一面出了点意外花了一个多小时。隔一个小时左右下一轮,2点半结束所

0

实习招聘面试经历-3

1.跨域 讲jsonp的原理,实现 jsonp的安全性:当时自己说的是可不可以判断来源,比如请求头,域名.然后面试官说jsonp是get请求,没有origin的.我又猜测用reffer? 嗯,这个对了;我还猜测是不是用cookie和session.但是直接的script请求是不能带上这个的.面试官让我再想,我就猜可不可以传多一个验证的字段验证身份.对了.后面自己看书发现了这种方法就是token.记录如下:先介绍CSRF: 跨站请求伪造,cross site requrest forgery.意思是跨域发出请求,请求是身份认证后的(除了referer不一样,cookie是一样的)原理: 受害者必须依次完成两个步骤:  1.登录受信任网站A,并在本地生成Cookie。  2.在不登出A的情况下,访问危险网站B。cookie发送:如果是内存cookie,都可以正常发送,如果是本地cookie,需要带有p3p属性.get请求可以通过img等标签,post请求直接通过form表单提交.  CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的!

0

实习招聘面试经历-2

1. Angular双向绑定的实现嗯…面试三次,每个面试官都会问我这个问题,这里还是贴一下参考的文章吧:Angular沉思录(一) 数据的双向绑定AngularJS 数据双向绑定揭秘简易实现版本:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263var Scope = function () { this.$$watchers = [];}Scope.prototype.$watch = function( watchExp, listener ) { this.$$watchers.push( { watchExp: watchExp, listener: listener || function () {} });};Scope.prototype.$digest = function() { var dirty; do { dirty = false; for (var i = this.$$watchers.length - 1; i >= 0; i--) { var newValue = this.$$watchers[i].watchExp(), oldValue = this.$$watchers[i].last; if( oldValue !== newValue) { this.$$watchers[i].listener(newValue, oldValue); dirty = true; this.$$watchers[i].last = newValue; } }; } while(dirty);};var $scope = new Scope();$scope.name = 'Ryan';$scope.$watch(function () { return $scope.name;}, function ( newValue, oldValue ) { console.log('Input Value has update:' + newValue + ' and Old Value is: ' + oldValue); element[0].value = newValue; tips.innerHTML = newValue});/** 视图到模型 **/var element = document.querySelectorAll('input'), tips = document.querySelectorAll('#tips')[0];element[0].addEventListener('keyup', function () { $scope.name = element[0].value; $scope.$digest();})/** 模型到视图 **/var updateScopeValue = function () { $scope.name = 'Bob'; $scope.$digest();}var btn = document.getElementsByTagName('button')[0];btn.addEventListener('click', function () { updateScopeValue();})

0

实习招聘面试经历-1

1. 无线端开发和PC端开发有什么不同?从三个方面讲:HTML:使用很多新的标签:12<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"><meta name="apple-mobile-web-app-capable" content="yes"> 在body里面可以使用<header><section>等H5新标签CSS:使用rem单位;rem单位的计算方法:40 * (设备宽度 / 设计图宽度);使用的时候实际设计图大小/40面试的时候说错了=。= 但是他没告诉我(把设计图宽度和设备宽度说反了)设置在document.documentElement.style.fontSize;设备宽度为document.documentElement.clientWidth使用更多的CSS3动画;flex布局,但是要考虑兼容性问题针对特定大小的设备进行媒体查询JavaScript:使用一些轻量级的第三方库,如用zepto代替jquery,vue代替angular;流量很重要,更要注重js文件的压缩合并混淆;其他的当时没想到

0

移动端SeeApp开发总结-5

这次总结一下用Angular的一些小技巧~ 好的实践 自动启动:ng-app,自动引导启动第一个ng-app;手工启动:angular.bootstrap() 使用ng-bind代替双括号语法。避免Angular用数据替换时出现双括号;实在要用时,使用ng-cloak,并且能避免内容闪烁 需要使用background-image时,可以自己定义指令: 123456789app.directive('backImg', function(){ return function(scope, element, attrs){ attrs.$observe('backImg', function(value) { element.css({ 'background-image': 'url(' + value +')' }); }); };}); 也可以使用ng-style来实现。

0

移动端SeeApp开发总结-4

一晃眼已经2016年了,隔了几个月没有总结写文章好想抽死自己。而且要准备校招了得放点东西到这里呀。寒假又来See实习了。大三上学期也断断续续帮See写一些页面:http://biouscowork.sinaapp.com/,每次活动都各种熬夜,后面才慢慢改善。接下来写一些这些页面的总结和坑。这次是接口渲染。 Ajax & Cgi CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。 这就是经常说的接口啦。cgi这个词是看过某大大写的页面后才发现原来应该这么叫。一般请求接口返回的就是需要渲染的数据了,比如这个:getActivity 。一般后台给的都是json,如果是字符串的话就前端解析一下就好了。一般一个活动页面是这样的流程:前端重构好,拿到接口后就直接渲染。运营提供数据给后台开发,后台改接口返回的数据。不是之前的php框架那样服务器渲染好后吐出html,用接口的html一般没有太多数据,所以要是接口请求失败了或者请求时间比较长页面会有很长的空白,体验没那么好。自己总结一下优缺点吧:优点: 简单的前后端分离,后端只提供数据,前端专注渲染 容易控制一些异步的数据展现 可以通过接口的代理简单实现本地开发,不需要太依赖后端环境 缺点: 请求上多了接口,渲染工作放在了客户端,性能不太好 和后台联调需要一些时间,沟通成本增加 不利于SEO,不过这种做的一般是活动页面,SEO并不是很重要 js代码需要一定的组织

0

移动端SeeApp开发总结-3

这次只讲一个东西:移动端图片压缩&上传。 DOM12<input id="uploadPic_input" type="file" accept="image/*" style="display:block;opacity:0;" name="image"><a id="uploadPic_btn" href="javascript:void(0);" class="a02"> 在移动端,input大部分还是支持的,当类型为file时,苹果会弹出拍照/录像和照片图库;手上没安卓= =,记得也是类似的选项。但是需求是只要图片,所以用了accpet这个属性,就能自动地把录像这个选项去掉了。accept还支持选定的格式,语法:1<input accept="audio/*|video/*|image/*|MIME_type"> 目前还是候选推荐标准(W3C Candidate Recommendation),但是支持的浏览器还是挺多的,测试中都能正常使用。相关链接:accept这里设置为透明是业务需要,默认不展示这个按钮。

0

移动端SeeApp开发总结-2

上一次记录了Fiddler和js结构组织,这次写一下在js里具体一个模块是怎么写的。 通用函数encodeURIComponent()和decodeURIComponent()encodeURIComponent: 把字符串作为URI 组件进行编码 不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII标点符号进行编码 其他字符(比如:;/?:@&=+$,# 这些用于分隔URI组件的标点符号),都是由一个或多个十六进制的转义序列替换的。 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。栗子:encodeURIComponent("你好,世界!")输出为%E4%BD%A0%E5%A5%BD%EF%BC%8C%E4%B8%96%E7%95%8C%EF%BC%81

0

移动端SeeApp开发总结-1

暑假在See实习:See 一张图片找到全球同款。进去之后接手的第一个项目是继续完成移动端版的App。需求有:登录,发表心愿,同求等等,主要是把整个流程都完成。年少无知的我以为只是重构点移动端页面,竟然说2天半可以完成(其实如果只是重构是真的够了);然后Sheen一脸惊讶,拍拍肩膀:”你确定?”。最后给了我5天左右的时间。好,不废话了。其实主要做的东西就是ajax和后台交互,移动端文件上传。

0

数据库入门-2

Intermediate SQLJoin连接1234567891011-- join 连接 做笛卡儿积,然后筛选掉不符合条件的行-- join 要跟着 on 写连接的条件,不删除重复的列,删除有空值对应不上的行select * from instructor inner join teaches on instructor.ID = teaches.ID;select * from instructor, teaches where instructor.ID = teaches.ID;-- 这两句等价-- 作用:当某一项属性为空值-- 四种连接:inner join/left outer join/right outer join/full outer join-- outer join-- left outer join: 保留左边的表的所有行,右边没有的使用NULL-- right outer join: 保留右边的表所有行,左边没有的使用NULL-- full outer join: 保留左右两边的表的所有行,没有的值使用NULL