一、Doctype的作用严格模式和混杂模式的区分,以及如何触发这2种模式
DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。
严格模式就是浏览器根据web标准去解析页面,是一种要求严格的DTD(文档类型定义),不允许使用任何表现层的语法,
混杂模式是一种向后兼容的解析方法。
二、请写出至少20个HTML5标签
三、语义化的理解?
1.html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;
2.在没有样式CCS情况下也以一种文档格式显示,并且是容易阅读的。
3.搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于SEO(搜索引擎优化)。
4.使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
四、列举5种IEhaslayout的属性及其值
haslayout是WindowsInternetExplorer渲染引擎的一个内部组成部分。在InternetExplorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。为了调节这两个不同的概念,渲染引擎采用了hasLayout的属性,属性值可以为true或false。当一个元素的hasLayout属性值为true时,我们说这个元素有一个布局(layout)
部分的IE显示的错误,都可以通过激发元素的haslayout属性来修正。可以通过设置css尺寸属性(width/height)等来激发元素的haslayout,使其“拥有布局”。如下所示,通过设置以下css属性即可。
*display:inline一block*height:(任何值除了auto)*float:(left或right)*position:absolute*width:(任何值除了auto)*writing一mode:tb一rl;(实现文字可以垂直显示,具体意义可百度了解)
*zoom:(除normal外任意值)
InternetExplorer7还有一些额外的属性(不完全列表):
*min一height:(任意值)*max一height:(除none外任意值)*min一width:(任意值)*max一width:(除none外任意值)*overflow:(除visible外任意值)*overflow一x:(除visible外任意值)*overflow一y:(除visible外任意值)*position:fixed
五、简述jpg,gif,png-8,png-24的区别,及其各自的使用场景
gif、jpg、png格式的图片在网站制作中的区别
Gif格式特点:1.透明性,Gif是一种布尔透明类型,既它可以是全透明,也可以是全不透明,但是它并没有半透明(alpha透明)。2.动画,Gif这种格式支持动画。3.无损耗性,Gif是一种无损耗的图像格式,这也意味着你可以对gif图片做任何操作也不会使得图像质量产生损耗。4.水平扫描,Gif是使用了一种叫作LZW的算法进行压缩的,当压缩gif的过程中,像素是由上到下水平压缩的,这也意味着同等条件下,横向的gif图片比竖向的gif图片更加小。例如500*10的图片比10*500的图片更加小5.间隔渐进显示,Gif支持可选择性的间隔渐进显示由以上特点看出只有256种颜色的gif图片不适合照片,但它适合对颜色要求不高的图形(比如说图标,图表等),它并不是最优的选择,我们会在后面中看到png是最优的选择。
对png8的误解Png8的在ie中的怪异表现:半透明的png8在ie6以下的浏览器显示为全透明。Alpha透明的全色PNG(png32)在ie6中会出现背景颜色(通常是灰色)。由上面可以总结:(a)全透明的png8可以在任一浏览器正常显示(就像gif一样)。半透明的png8在除了ie6及其以下的浏览器下错误的显示成全透明,其它浏览器都能正常显示半透明。这个bug并不需要特殊对待,因为在不支持半透明的浏览器下只是显示为全透明,对用户体验影响不大,它反而是透明gif的加强版。(b)第二个bug没有什么好的方法解决,只能通过影响性能的方法AlphaImageLoader与需要加特殊标签(VML)。因此得出结论就是:请使用PNG8。Png8的软件问题:Photoshop只能导出布尔透明的PNG8。Fireworks既能导出布尔透明的PNG8,也能导出alpha透明的PNG8.
六、能够设置文本加粗的样式属性是什么
字体加粗(font一weight)
功能:用于设置字体笔划的粗细。
属性值:取消加粗-normal
属性值一bold,bolder,light,lighter
渐变度一100,200,300,400(相当于normal),500,600,700(相当于bold、lighter、bolder、以及数值100-900。(500以下常规字体,600-900加粗字体)
语法为:h1{font一weight:属性值}
七、Html和xhtml有什么区别
html是一种基本的web网页设计语言(超文本标记语言)。
xhtml是一个基于XML的置标语言。(可扩展超文本语言)
最主要的不同:
XHTML元素必须正确的被嵌套,元素必须关闭,标签必须小写,必须有根元素。
八、算法题:有一个长度为n一1的数组,包含1一n中不重复的乱序的数,求寻找范围内不在数组中的数,考虑空间占用,性能优化,溢出等情况,至少写两个算法
九、实现以下方法(与标准一致)
Element.prototype.getElementsByClassName:
Element.prototype.getElementsByClassName=function(searchClass,node,tag){
if(document.getElementsByClassName){
varnodes=(node||document).getElementsByClassName(searchClass),
result=[];
for(vari=0;node=nodes[i++];){
if(tag!=="*"&&node.tagName===tag.toUpperCase()){
result.push(node);
}
returnresult;
}else{
node=node||document;
tag=tag||"*";
varclasses=searchClass.split(""),
elements=(tag==="*"&&node.all)node.all:node.getElementsByTagName(tag),
patterns=[],
current,
match;
vari=classes.length;
while(一一i>=0){
patterns.push(newRegExp("(^|\\s)"+classes[i]+"(\\s|$)"));
varj=elements.length;
while(一一j>=0){
current=elements[j];
match=false;
for(vark=0,kl=patterns.length;kmatch=patterns[k].test(current.className);
if(!match)
break;
if(match)
result.push(current);
Function.prototype.bind:
Function.prototype.bind=function(oThis){
if(typeofthis!=="function"){
thrownewTypeError("bindfunctionerror");
varaArgs=Array.prototype.slice.call(arguments,1),
fToBind=this,
fBound=function(){
returnfToBind.apply(oThis||window,aArgs.concat(Array.prototype.slice.call(arguments)));
};
returnfBound;
十、编写一个方法去掉一个数组的重复元素
1.遍历数组法
最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中;注意点:判断值是否在数组的方法“indexOf”是ECMAScript5方法,IE8以下不支持,需多写一些兼容低版本浏览器代码,源码如下:
//最简单数组去重法
functionunique1(array){
varn=[];//一个新的临时数组
//遍历当前数组
for(vari=0;i//如果当前数组的第i已经保存进了临时数组,那么跳过,
//否则把当前项push到临时数组里面
if(n.indexOf(array[i])==一1){
n.push(array[i]);
returnn;
//判断浏览器是否支持indexOf,indexOf为ecmaScript5新方法IE8以下(包括IE8,IE8只支持部分ecma5)不支持
if(!Array.prototype.indexOf){
//新增indexOf方法
Array.prototype.indexOf=function(item){
varresult=一1,a_item=null;
if(this.length==0){
for(vari=0,len=this.length;ia_item=this[i];
if(a_item===item){
result=i;
2.对象键值对法
该方法执行的速度比其他任何方法都快,就是占用的内存大一些;实现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键,不是的话给对象新增该键并放入新数组。注意点:判断是否为js对象键时,会自动对传入的键执行“toString()”,不同的键可能会被误认为一样;例如:a[1]、a["1"]。解决上述问题还是得调用“indexOf”。
functionunique2(array){
varn={},r=[],len=array.length,val,type;
val=array[i];
type=typeofval;
if(!n[val]){
n[val]=[type];
r.push(val);
}elseif(n[val].indexOf(type)<0){
n[val].push(type);
returnr;
3.数组下标判断法
还是得调用“indexOf”性能跟方法1差不多,实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,那么表示第i项是重复的,忽略掉。否则存入结果数组。
functionunique3(array){
varn=[array[0]];//结果数组
//从第二项开始遍历
for(vari=1;i//如果当前数组的第i项在当前数组中第一次出现的位置不是i,
//那么表示第i项是重复的,忽略掉。否则存入结果数组
if(array.indexOf(array[i])==i){
4.排序后相邻去除法
虽然原生数组的”sort”方法排序结果不怎么靠谱,但在不注重顺序的去重里该缺点毫无影响。实现思路:给传入数组排序,排序后相同值相邻,然后遍历时新数组只加入不与前一值重复的值。
//将相同的值相邻,然后遍历去除重复值
functionunique4(array){
array.sort();
varre=[array[0]];
if(array[i]!==re[re.length一1])
{
re.push(array[i]);
returnre;
5.优化遍历数组法
实现思路:获取没重复的最右一值放入新数组。(检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断)
//思路:获取没重复的最右一值放入新数组
functionunique5(array){
varr=[];
for(vari=0,l=array.length;ifor(varj=i+1;jif(array[i]===array[j])j=++i;
r.push(array[i]);
十一、请使用javascript写出数组快速排序代码
functionquiktSort(arr){
varleft=[],right=[];
if(arr.length<1){
returnarr;
varindex=Math.floor(arr.length/2);
varpoint=arr.splice(index,1);
for(vari=0,len=arr.length;iif(arr[i]left.push(arr[i]);
right.push(arr[i]);
returnquickSort(left).concat(point,quickSort(right));
十二、编写一个布局,页面宽度自适应,最小宽度300px,左边定宽35%,右边定宽65%
.container{
height:600px;
width:300px;
min一width:300px;
.left{
width:35%;
height:100%;
background:#ff0;
float:left;
.right{
overflow:hidden;
width:65%;
background:#0f0;
十三、谈谈对html5的了解
1.良好的移动性,以移动设备为主。
2.响应式设计,以适应自动变化的屏幕尺寸
3.支持离线缓存技术,webStorage本地缓存
4.新增canvas,video,audio等新标签元素。新增特殊内容元素:article,footer,header,nav,section等,新增表单控件:calendar,date,time,email,url,search。
5.地理定位...
6.新增webSocket/webWork技术
十四、Js面向对象的几种方式
1.对象的字面量varobj={}
2.创建实例对象varobj=newObject();
3.构造函数模式functionfn(){},newfn();
4.工厂模式:用一个函数,通过传递参数返回对象。functionfn(params){varobj=newObject();obj.params=params;returnobj;},fn(params);
5.原型模式:functionclock(hour){}fn.prototype.hour=0;newclock();
首先,每个函数都有一个prototype(原型)属性,这个指针指向的就是clock.prototype对象。而这个原型对象在默认的时候有一个属性constructor,指向clock,这个属性可读可写。而当我们在实例化一个对象的时候,实例newClock除了具有构造函数定义的属性和方法外(注意,只是构造函数中的),还有一个指向构造函数的原型的指针,ECMAScript管他叫[[prototype]],这样实例化对象的时候,原型对象的方法并没有在某个具体的实例中,因为原型没有被实例。
十五、在css中哪个属性会影响dom读取文档流的顺序
1.direction,writing一mode
十六、前端页面由哪三层构成,分别是什么,作用是什么
Html(结构):超文本标记语言,由HTML或xhtml之类的标记语言负责创建。标签,也就是那些出现在尖括号里的单词,对网页内容的语义含义做出了描述,但这些标签不包含任何关于如何显示有关内容的信息。例如,P标签表达了这样一种语义:“这是一个文本段。”
Css(表现):层叠样式表,由css负责创建。css对“如何显示有关内容”的问题做出了回答。
Js(行为):客户端脚本语言,内容应该如何对事件做出反应
十七、Css的基本语句构成是?
语法:(自定义的样式名称){样式内容(属性:属性值;)}
十八、如何对网站的文件和资源进行优化
2.文件压缩(目的是直接减少文件下载的体积)
3.使用cdn托管资源
4.使用缓存
5.gizp压缩需要的js和css文件
6.meta标签优化(title,description,keywords),heading标签的优化,alt优化
7.反向链接,网站外链接优化
十九、Javascipt的本地对象,内置对象和宿主对象
本地对象:Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError,简单来说,本地对象就是ECMA一262定义的类.
内置对象:ECMA一262把内置对象(built一inobject)定义为“由ECMAScript实现提供的、独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。
同样是“独立于宿主环境”。根据定义我们似乎很难分清“内置对象”与“本地对象”的区别。而ECMA一262只定义了两个内置对象,即Global和Math(它们也是本地对象,根据定义,每个内置对象都是本地对象)。
如此就可以理解了。内置对象是本地对象的一种。而其包含的两种对象中,Math对象我们经常用到,可这个Global对象是啥东西呢?
Global对象是ECMAScript中最特别的对象,因为实际上它根本不存在,有点玩人的意思。大家要清楚,在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。
类似于isNaN()、parseInt()和parseFloat()方法等,看起来都是函数,而实际上,它们都是Global对象的方法。而且Global对象的方法还不止这些.
宿主对象:ECMAScript中的“宿主”就是我们网页的运行环境,即“操作系统”和“浏览器”。所有非本地对象都是宿主对象(hostobject),即由ECMAScript实现的宿主环境提供的对象。所有的BOM和DOM对象都是宿主对象。因为其对于不同的“宿主”环境所展示的内容不同。其实说白了就是,ECMAScript官方未定义的对象都属于宿主对象,因为其未定义的对象大多数是自己通过ECMAScript程序创建的对象。自定义的对象也是宿主对象。
二十、输入url后的加载过程
1)查找域名对应IP地址
2)建立连接(TCP的三次握手)
3)构建网页
4)断开连接(TCP的四次挥手)
二十一、说说TCP传输的三次握手四次挥手策略
为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了TCP的标志:SYN和ACK。
发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。
最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。
若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。
断开一个TCP连接则需要“四次挥手”:
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。
二十二、JQuery中有几种类型的选择器
1.层叠选择器$(“forminput”)
2.基本过滤选择器:first:last:not()
3.内容过滤选择器:odd:eq():animated
4.可视化过滤选择器:hidden:visible
5.属性过滤选择器:div[id]
6.子元素过滤选择器:first一child:last一child:only:child
7.表单元素过滤选择器:enabled:disabled:checked:selected
8.id,类,类型,元素...
二十三、jQuery中的Delegate()函数有什么作用
delegate()方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。
使用delegate()方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。$("div").delegate("button","click",function(){
$("p").slideToggle();});
二十四、行内元素有那些。块级元素有那些。空元素有哪些
首先:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素。
(1)行内元素有:abspanselectstrong(强调的语气)imginput(内联元素)
(2)块级元素有:divulollidldtddh1h2h3h4…p
(3)常见的空元素:
![]()
鲜为人知的是:
设置div背景色为灰色.1).link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。
2).link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。
3).link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。
4).link支持使用Javascript控制DOM去改变样式;而@import不支持。
四十七、将字符串helloChina反转输出
varstr="helloChina";
方法1:console.log(str.split("").reverse().join(""));');
方法2:for(varx=str.length一1;x>=0;x一一){
document.write(str.charAt(x));
方法3:vara=str.split("");
varrs=newArray;
while(a.length){
rs.push(a.pop());
alert(rs.join(""));
四十八、为什么无法定义1px左右高度的容器
IE6下这个问题是因为默认的行高造成的,解决的方法也有很多,例如:overflow:hidden|zoom:0.08|line一height:1px
四十九、FireFox中标签的居中问题的解决办法
*{margin:0pxauto;}
五十、请写出XHTML和css如何注释
XHTML:
css:/*注释内容*/
五十一、现在想调节一下父元素的透明度,但是又不影响子元素的透明度,怎么破?
方法1:用RGBA
方法2:再加一层与父元素同级的div装载子元素定位到子元素原位置
五十二、简述ECMASCRIPT6的新特性
1.增加块作用域
2.增加letconst
3.解构赋值
4.函数参数扩展(函数参数可以使用默认值、不定参数以及拓展参数)
5.增加class类的支持
6.增加箭头函数
7.增加模块和模块加载(ES6中开始支持原生模块化啦)
8.math,number,string,array,object增加新的API
五十三、Apply和call方法的异同
相同点:两个方法产生的作用是完全一样的,第一个参数都是对象;
不同点:
call()方法参数将依次传递给借用的方法作参数,即fn.call(thisobj,arg1,arg2,arg3...argn),有n个参数
apply()方法第一个参数是对象,第二个参数是数组fn.apply(thisobj,arg),此处的arg是一个数组,只有两个参数
五十四、在javascript中什么是伪数组,如何将伪数组转化为标准数组
这里把符合以下条件的对象称为伪数组:
1,具有length属性
2,按索引方式存储数据
3,不具有数组的push,pop等方法
伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,不具有数组的push,pop等方法,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用document.getElementsByTagName,document.childNodes之类的,它们返回的NodeList对象都属于伪数组。
可以使用以下函数将伪数组转化为真正的Array对象(兼容问题处理)。
functionmakeArray(c){
returnArray.prototype.slice.call(c);
varret=[],i,len=c.length;
for(i=0;iret[i]=(c[i]);
returnret;
五十五、Js和native交互的方法与问题
实现JS和Native交互有两种方式:
第一种:shouldOverrideUrlLoading(WebViewview,Stringurl)
通过给WebView加一个事件监听对象(WebViewClient)并重写shouldOverrideUrlLoading(WebViewview,Stringurl)方法。当按下某个连接时WebViewClient会调用这个方法,并传递参数view和url
第二种:JS和Java互调
WebView开启JavaScript脚本执行
WebView设置供JavaScript调用的交互接口
客户端和网页端编写调用对方的代码
JS调用JAVA
JS:window.jsInterfaceName.methodName(parameterValues)
native:webView.addJavascriptInterface(newJsInteration(),“androidNative”);
Java调用JS
webView调用js的基本格式为:
webView.loadUrl(“javascript:methodName(parameterValues)”)
调用js无参无返回值函数:
Stringcall=“javascript:sayHello();webView.loadUrl(call);
调用js有参无返回值函数:
Stringcall=“javascript:alertMessage(\””+“content”+“\”)”;
webView.loadUrl(call);
调用js有参数有返回值的函数
Android在4.4之前并没有提供直接调用js函数并获取值的方法,所以在此之前,常用的思路是java调用js方法,js方法执行完毕,再次调用java代码将值返回。Android4.4之后使用evaluateJavascript即可。
privatevoidtestEvaluateJavascript(WebViewwebView){
webView.evaluateJavascript("getGreetings()",newValueCallback(){
@Override
publicvoidonReceiveValue(Stringvalue){
Log.i(LOGTAG,"onReceiveValuevalue="+value);
}});
注:
参数类型如果是简单的int或String,可以直接传,对于复杂的数据类型,建议以字符串形式的json返回。
evaluateJavascript方法必须在UI线程(主线程)调用,因此onReceiveValue也执行在主线程。
当native与js交互时存cookie看到很多人遇到过这样一个问题,cookie存不进去,网上有很多解释方案,但是很多没说到重点上,这里直接贴一下代码:
publicstaticvoidsynCookies(Contextcontext,Stringurl,Stringversion){
CookieSyncManager.createInstance(context);
CookieManagercookieManager=CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeAllCookie();
cookieManager.setCookie(url,"sessionKey="+UserInfoShareprefrence.getInstance(context).getLocalSessionKey())
cookieManager.setCookie(url,"productVersion=android一epocket一v"+version);
CookieSyncManager.getInstance().sync();
存不进去的很大一部分原因是你的url不对,这里的url就是显示的url的域名,这里顺便贴出取域名的方法,给出的是通过正则提取域名
/**
*获得域名
*@paramurl
*@return
*/
publicstaticStringgetDomain(Stringurl){
Patternp=Pattern.compile("[^//]*\\.(com|cn|net|org|biz|info|cc|tv)",Pattern.CASE_INSENSITIVE);
Matchermatcher=p.matcher(url);
matcher.find();
returnmatcher.group();
还有一点就是,如果你想传递多个值给cookie的话,可以多次使用setCookie,不要擅自的自己拼值,因为你拼的字符串中可能存在分号,内部多分号做了特殊处理,截取分号之前的,之后的直接放弃!
五十六、用sass的mixin定义一些代码片段,且可传参数
*@module功能
*@description生成全屏方法
*@methodfullscreen
*@version1.7.0
*@param{Integer}$z一index指定层叠级别<1.7.0>
*@param{Keywords}$position指定定位方式,取除`static|relative`之外的值,默认值:absolute<1.8.5>
@mixinfullscreen($z一index:null,$position:absolute){
position:$position;
z一index:$z一index;
top:0;
right:0;
bottom:0;
left:0;
五十七、移动端经常出现的兼容问题,谈谈移动端应用或者wap站的一些优化技巧和心得
1、安卓浏览器看背景图片,有些设备会模糊。
因为手机分辨率太小,如果按照分辨率来显示网页,字会非常小,安卓手机devicePixelRatio比较乱,有1.5的,有2的也有3的。想让图片在手机里显示更为清晰,必须使用2x的背景图来代替img标签(一般情况都是用2倍),或者指定background一size:contain;都可以
2、防止手机中网页放大和缩小
3、apple一mobile一web一app一capable是设置Web应用是否以全屏模式运行。
如果content设置为yes,Web应用会以全屏模式运行,反之,则不会。content的默认值是no,表示正常显示;也可以通过只读属性window.navigator.standalone来确定网页是否以全屏模式显示。
语法:
body{
一webkit一overflow一scrolling:touch;
overflow一scrolling:touch;
Android3+和iOS5+支持CSS3的新属性为overflow一scrolling
Element{
一webkit一user一select:none;
一moz一user一select:none;
一khtml一user一select:none;
user一select:none;
解决移动设备可选中页面文本(视产品需要而定)
element{
一webkit一touch一callout:none;
11.iphone及ipad下输入框默认内阴影
一webkit一appearance:none;
12.ios和android下触摸元素时出现半透明灰色遮罩
一webkit一tap一highlight一color:rgba(255,255,255,0)
13.active兼容处理即伪类:active失效
方法一:body添加ontouchstart
方法二:js给document绑定touchstart或touchend事件
a{
color:#000;
a:active{
color:#fff;
bar
document.addEventListener('touchstart',function(){},false);
14.动画定义3D启用硬件加速
一webkit一transform:translate3d(0,0,0)
transform:translate3d(0,0,0);
注意:3D变形会消耗更多的内存与功耗
15.Retina屏的1px边框
border一width:thin;
16.webkitmask兼容处理
某些低端手机不支持css3mask,可以选择性的降级处理。
比如可以使用js判断来引用不同class:
if('WebkitMask'indocument.documentElement.style){
alert('支持mask');
alert('不支持mask');
17.旋转屏幕时,字体大小调整的问题
html,body,form,fieldset,p,div,h1,h2,h3,h4,h5,h6{
一webkit一text一size一adjust:100%;
18.transition闪屏
/设置内嵌的元素在3D空间如何呈现:保留3D/
一webkit一transform一style:preserve一3d;
/设置进行转换的元素的背面在面对用户时是否可见:隐藏/
一webkit一backface一visibility:hidden;
19.圆角bug
某些Android手机圆角失效background一clip:padding一box;
20.顶部状态栏背景色
说明:
除非你先使用apple一mobile一web一app一capable指定全屏模式,否则这个meta标签不会起任何作用。
如果content设置为default,则状态栏正常显示。如果设置为blank,则状态栏会有一个黑色的背景。如果设置为blank一translucent,则状态栏显示为黑色半透明。如果设置为default或blank,则页面显示在状态栏的下方,即状态栏占据上方部分,页面占据下方部分,二者没有遮挡对方或被遮挡。如果设置为blank一translucent,则页面会充满屏幕,其中页面顶部会被状态栏遮盖住(会覆盖页面20px高度,而iphone4和itouch4的Retina屏幕为40px)。默认值是default。
21.设置缓存
手机页面通常在第一次加载后会进行缓存,然后每次刷新会使用缓存而不是去重新向服务器发送请求。如果不希望使用缓存可以设置no一cache。
22.桌面图标
iOS下针对不同设备定义不同的桌面图标。
图片尺寸可以设定为5757(px)或者Retina可以定为114114(px),ipad尺寸为72*72(px)
23.启动画面
iOS下页面启动加载时显示的画面图片,避免加载时的白屏。
可以通过madia来指定不同的大小:
24.浏览器私有及其它meta
全屏模式
强制竖屏
强制横屏
应用模式
UC浏览器私有
其它(针对手持设备优化,主要是针对一些老的不识别viewport的浏览器,比如黑莓)
微软的老式浏览器
windowsphone点击无高光
25.IOS中input键盘事件keyup、keydown、keypress支持不是很好
用inputsearch做模糊搜索的时候,在键盘里面输入关键词,会通过ajax后台查询,然后返回数据,然后再对返回的数据进行关键词标红。用input监听键盘keyup事件,在安卓手机浏览器中是可以的,但是在ios手机浏览器中变红很慢,用输入法输入之后,并未立刻响应keyup事件,只有在通过删除之后才能响应!
解决办法:
可以用html5的oninput事件去代替keyup
document.getElementById('testInput').addEventListener('input',function(e){
varvalue=e.target.value;
});
然后就达到类似keyup的效果!
26.h5网站input设置为type=number的问题
一般会产生三个问题,一个问题是maxlength属性不好用了。另外一个是form提交的时候,默认给取整了。三是部分安卓手机出现样式问题。
问题一解决,用js如下
functioncheckTextLength(obj,length){
if(obj.value.length>length){
obj.value=obj.value.substr(0,length);
问题二,是因为form提交默认做了表单验证,step默认是1,要设置step属性,假如保留2位小数,写法如下:
关于step:input中type=number,一般会自动生成一个上下箭头,点击上箭头默认增加一个step,点击下箭头默认会减少一个step。number中默认step是1。也就是step=0.01,可以允许输入2位小数,并且点击上下箭头分别增加0.01和减少0.01。
假如step和min一起使用,那么数值必须在min和max之间。
问题三,去除input默认样式
input[type=number]{
一moz一appearance:textfield;
input[type=number]::一webkit一inner一spin一button,
input[type=number]::一webkit一outer一spin一button{
margin:0;
27.ios设置input按钮样式会被默认样式覆盖
解决方式如下:
input,
textarea{
border:0;
设置默认样式为none
28.IOS键盘字母输入,默认首字母大写
解决方案,设置如下属性
29.select下拉选择设置右对齐
设置如下:
selectoption{
direction:rtl;
30.通过transform进行skew变形,rotate旋转会造成出现锯齿现象
可以设置如下:
一webkit一transform:rotate(一4deg)skew(10deg)translateZ(0);
transform:rotate(一4deg)skew(10deg)translateZ(0);
outline:1pxsolidrgba(255,255,255,0)
31.移动端点击300ms延迟
300ms导致用户体验不是很好,解决这个问题,我们一般在移动端用tap事件来取代click事件。推荐两个js,一个是fastclick,一个是tap.js
32.移动端点透问题
案例如下:
点头事件测试
div是绝对定位的蒙层,并且z一index高于a。而a标签是页面中的一个链接,我们给div绑定tap事件:
$('#haorooms').on('tap',function(){
$('#haorooms').hide();
我们点击蒙层时div正常消失,但是当我们在a标签上点击蒙层时,发现a链接被触发,这就是所谓的点透事件。
原因:
解决:
(1)尽量都使用touch事件来替换click事件。例如用touchend事件(推荐)。
(3)用preventDefault阻止a标签的click
(5)以上一般都能解决,实在不行就换成click事件。
下面介绍一下touchend事件,如下:
$("#haorooms").on("touchend",function(event){
event.preventDefault();
33.关于iOS与OSX端字体的优化(横竖屏会出现字体加粗不一致等)
iOS浏览器横屏时会重置字体大小,设置text一size一adjust为none可以解决iOS上的问题,但桌面版Safari的字体缩放功能会失效,因此最佳方案是将text一size一adjust为100%。
一ms一text一size一adjust:100%;
text一size一adjust:100%;
34.关于iOS系统中,中文输入法输入英文时,字母之间可能会出现一个六分之一空格可以通过正则去掉this.value=this.value.replace(/\u2006/g,'');
35.移动端HTML5audioautoplay失效问题
这个不是BUG,由于自动播放网页中的音频或视频,会给用户带来一些困扰或者不必要的流量消耗,所以苹果系统和安卓系统通常都会禁止自动播放和使用JS的触发播放,必须由用户来触发才可以播放。
解决方法思路:先通过用户touchstart触碰,触发播放并暂停(音频开始加载,后面用JS再操作就没问题了)。
解决代码:
document.addEventListener('touchstart',function(){
document.getElementsByTagName('audio')[0].play();
document.getElementsByTagName('audio')[0].pause();
复制代码代码如下:
有的浏览器可能要点击两遍!
有些机型的搜索input控件会自带close按钮(一个伪元素),而通常为了兼容所有浏览器,我们会自己实现一个,此时去掉原生close按钮的方法为
#Search::一webkit一search一cancel一button{
display:none;
如果想使用原生close按钮,又想使其符合设计风格,可以对这个伪元素的样式进行修改。
zepto方式:
$(sltElement).trrgger("mousedown");
原生js方式:
functionshowDropdown(sltElement){
varevent;
event=document.createEvent('MouseEvents');
event.initMouseEvent('mousedown',true,true,window);
sltElement.dispatchEvent(event);
五十八、H5中新增的单位rem是什么意思,和em的关系,以及rem在自适应布局中的应用方法
Rem为单位:
rem是相对于根元素的“font一size”为基准。比如说我们给html设置font一size为100px,
那么我们要给html中的p标签设置16px的字体,font一size设置.16rem就可以,在这里16px=.16rem。
Em为单位:
这种技术需要一个参考点,一般都是以
的“font一size”为基准。比如说我们使用“1em”等于“10px”来改变默认值“1em=16px”,这样一来,我们设置字体大小相当于“14px”时,只需要将其值设置为“1.4em”。
这个单位与em有什么区别呢?
五十九、如何实现浏览器内多个标签页之间的通信?
通过WebSocket或SharedWorker把客户端和服务器端建立socket连接,从而实现通信;也可以调用localstorge、cookies等本地存储方法。
六十、假设现在页面里有一个id是con的div,现在需要编写js代码,在页面加载完成后将div的高度设置成100px,宽度设置成60px,并设置成灰色的1px的边框,背景设置成浅黄色。
window.onload=function(){
varoDiv=document.getElementById("con");
oDiv.style.height="100px";
oDiv.style.width="60px";
oDiv.style.width="1pxsolidgray";
oDiv.style.backgroundColor="yellow";
六十一、对新技术有那些了解,常去的网站有那些
掘金、简书、github、csdn,知乎等
六十二、用程序找出数组中出现次数超过一半的数字
思路:
六十三、请设计一套方案,用于确保页面中js加载完全,对于优化某网页的加载速度,有什么独到见解
js方法:
varuserName="xiaoming";
alert(userName);
jquery方法:
$(document).ready(function(){
或者简写:
$(function(){
如何确定一个js是否加载完全或者页面中的所有js加载完全,具体办法如下:
functionloadScript(url,callback){
varscript=document.createElement("script");
script.type="text/javascript";
if(script.readyState){
script.onreadystatechange=function(){
if(script.readyState=="loaded"||script.readyState=="complete"){
script.onreadystatechange=null;
callback();
script.onload=function(){
script.src=url;
document.getElementsByName("head")[0].appendChild(script);
如何让脚本的执行顺序按照你设定的顺序执行,使用嵌套的方式:
loadScript("file1.js",function(){
loadScript("file2.js",function(){
loadScript("file3.js",function(){
alert("Allfilesareloaded");
网页加载速度优化:
1、减少请求
最大的性能漏洞就是一个页面需要发起几十个网络请求来获取诸如样式表、脚本或者图片这样的资源,这个在相对低带宽和高延迟的移动设备连接上来说影响更严重。
2、整合资源
对开发者来说,将Javascript代码和CSS样式放到公共的文件中供多个页面共享是一种标准的优化方法,这个方法能很简单的维护代码,并且提高客户端缓存的使用效率。
在Javascript文件中,要确保在一个页面中相同的脚本不会被加载多次,当大团队或者多个团队合作开发的时候,这种冗余的脚本就很容易出现,你可能会对它的发生频率并不低感到非常吃惊。
Sprites是css中处理图片的一项技术,Sprites就是将多张图片整合到一个线性的网状的大图片中,页面就可以将这个大图片一次性获取回来并且做为css的背景图,然后使用css的背景定位属性展示页面需要的图片部分,这种技术将多个请求整合成一个,能显著地改善性能。
平稳地改进但是需要对资源有控制权限,根据开发者的网站不同权限,一些资源并不需要被整合起来(例如,一些由CMS生成的资源),还有,对于一些外部域引用的资源,强行整合可能会导致问题,马海祥提醒大家需要注意的是,整合资源对手机浏览器来说是一把双刃剑,整合资源确实会在首次访问减少请求,但是大的资源文件可能会导致缓存失效,所以,需要小心地使用各种技术整合资源,以达到优化本地存储的目的。
3、使用浏览器缓存和本地缓存
移动浏览器缓存,通常是比桌面PC小的多,这就导致了缓存的数据会很经常被清理,HTML5的缓存基于浏览器缓存提供了一个很好的替换方案,Javascript的localStorage已经在所有主流的桌面和移动端浏览器上都实现了,使用脚本代码能简便地支持HTML5的localStorage操作,可以读写键值数据,每个域名大概有5MB的容量,虽然不同的移动浏览器上读写速度相差很大,但是localStorage大容量的缓存使得它很适合作为客户端的缓存,从localStorage获取资源明显快于从服务器上获取资源,而且在大多数移动设备上也比依靠缓存头或者浏览器的本地缓存更灵活可靠,这是移动浏览器比桌面PC更有优势的一个地方,在桌面PC上,本地缓存仍然优先使用标准的浏览器缓存,导致桌面PC本地缓存的性能落后于移动浏览器。
在此,马海祥要提醒各位一下:虽然localStorage的机制易于实现,但是它的一些控制机制却是非常复杂的,你需要考虑到缓存带给你的所有问题,比如缓存失效(什么时候需要删除缓存?),缓存丢失(当你希望数据在缓存中的时候它并不在怎么办?),还有当缓存满的时候你怎么办?
4、首次使用的时候在HTML中嵌入资源
HTML的标准是使用链接来加载外部资源,这使得更容易在服务器上(或者在CDN上)操作更新这些资源,而不是在每个页面上修改更新这些资源,根据上文讨论的,这种模式也使得浏览器能从本地缓存而不是服务器上获取资源。
但是对还没有缓存到浏览器localStorage的资源来说,这种模式对网站的性能有负面的影响,一般来说,一个页面需要几十个单独的请求来获取资源从而渲染页面。
所以说,从性能的角度来说,如果一个资源没有很高的被缓存的几率的话,最好把它嵌入到页面的HTML中(叫inlining),而不是使用链接外部,脚本和样式是支持内嵌到HTML中的,但是图片和其他的二进制资源其实也是可以通过内嵌包含base64编码的文本来嵌入到HTML中的。
内嵌的缺点是页面的大小会变得非常大,所以对于Web应用来说,关键的是能够跟踪分析这个资源什么时候需要从服务端获取,什么时候已经缓存到客户端了。
另外,在第一次请求资源后必须能够使用代码在客户端缓存资源,因此,在移动设备上,使用HTML5localStorage能很好地做到内嵌。
由于不知道用户是否已经访问过这个页面了,所以需要网站有机制能生成不同版本的页面。
5、使用HTML5服务端发送事件
Web应用已经使用了各种从服务器上轮询资源的方法来持续地更新页面,HTML5的EventSource对象和Server一Sent事件能通过浏览器端的JavaScript代码打开一个服务端连接客户端的单向通道,服务端可以使用这个写通道来发送数据,这样能节省了HTTP创建多个轮询请求的消耗。
这种方式比HTML的WebSocket更高效,WebSocket的使用场景是,当有许多客户端和服务端的交互的时候(比如消息或者游戏),在全双工连接上建立一个双向通道。
这个技术是基于具体的技术实现的,如果你的网站当前是使用其他的Ajax或者Comet技术来轮询的,转变成Server一Sent事件需要重构网站的Javascript代码。
6、消除重定向
当用户在一个移动设备上访问桌面PC网站的时候,Web网站应用通常读取HTTP的user一agent头来判断这个用户是否是来自移动设备的,然后应用会发送带有空HTTPbody和重定向HTTP地址头的HTTP301(或者302)请求,把用户重定向到网站的移动版本上去,但是这个额外的客户端和服务端的交互通常在移动网络上会消耗几百毫秒,因此,在原先的请求上传递移动的web页会比传递一个重定向的信息并让客户端再请求移动页面更快。
对于那些想要在移动设备上看桌面PC网站的用户来说,你可以在移动web页面上提供一个链接入口,这样也能同时表示你的网站是并不提倡这种行为的。
虽然这个技术在理论上是简单的,但是实际上并不易于实施,由于有些m.sites是宿主在其他地方的,所以许多网站会选择重定向到一个不同的服务器上,有的网站则是会在重定向请求的时候种植上Cookie告诉Web应用这个用户是在使用移动设备,这种方法可能对web应用来说更容易控制。
7、减少资源负载
关于移动端页面的大小问题,渲染小页面更快,获取小资源也更快,减小每个请求的大小通常不如减少页面请求个数那么显著地提高性能。
但是有些技术在性能方面,特别是在需要对带宽和处理器性能精打细算的移动设备环境下,仍然是能带来很大利益的。
8、压缩文本和图像
诸如gzip这样的压缩技术,依靠增加服务端压缩和浏览器解压的步骤,来减少资源的负载,但是,一般来说,这些操作都是被高度优化过了,而且测试表明,压缩对网站还是起到优化性能的作用的,那些基于文本的响应,包括HTML,XML,JSON(JavascriptObjectNotation),Javascript,和CSS可以减少大约70%的大小。
浏览器在Accept一Encoding请求头中申明它的解压缩技术,并且当它们接收到服务端返回的Content一Encoding响应头标示的时候,就会按照这个响应头自动做解压操作。
马海祥觉得这种方法的优点就是易于实现,如果设置正确的话,现在所有的Web服务器都支持压缩响应,但是,也有一些桌面PC的安全工具会将请求头中的Accept一Encoding头去掉,这样即使浏览器支持解压缩,用户也无法获取到压缩后的响应。
9、代码简化
简化带来的好处并不局限于减少带宽和延迟,对于那些移动设备上缓存无法保存的过大资源来说,也是很有改善的,Gzip在这个方面并没有任何帮助,因为资源是在被解压后才被缓存起来的。
Google的ClosureCompiler已经难以置信地完成了理解和简化Javascript的工作,但是CSS的简化则没有那么容易,因为对不同浏览器来说有不同的CSS技术能迷惑CSS简化工具,然后让CSS简化后无法正常工作,马海祥提醒大家必须要注意的是,已经有这样的案例了,即使只是删除了不必要的字符,简化工作也有可能破坏页面,所以当你应用简化技术之后,请做一下完整的功能测试工作。
10、调整图片大小
为了加速页面渲染速度和减少带宽及内存消耗,可以动态地调整图片大小或者将图片替换为移动设备专用的更小的版本,不要依靠浏览器来将高分辨率的图片转换成小尺寸的图片,这样会浪费带宽。
另外一个方法是先尽快加载一个低分辨率的图片来渲染页面,在onload或者用户已经开始和页面交互以后将这些低分辨率的图片替换成为高分辨率的图片。
特别应用在高度动态化的网站是有优势的。
11、使用HTML5和CSS3.0来简化页面
HTML5包括了一些新的结构元素,例如header,nav,article和footer,使用这些语义化的元素比传统的使用div和span标签能使得页面更简单和更容易解析,一个简单的页面更小加载更快,并且简单的DOM(DocumentObjectModel)代表着更快的JavaScript执行效率,新的标签能很快地应用在包括移动端的新浏览器版本上,并且HTML5设计让那些不支持它的浏览器能平稳过渡使用新标签。
HTML5的一些表单元素提供了许多新属性来完成原本需要javascript来完成的功能,例如,新的placeholder属性用于显示在用户输入进入输入框之前显示的介绍性文字,autofocus属性用于标示哪个输入框应当被自动定位。
另外,只要浏览器支持内建的层次,圆角,阴影,动画,过渡和其他的图片效果,CSS3.0就能帮助你创建轻便简易的页面了,而这些图片效果原先是需要加载图片才能完成的,这样,这些新特性就能加速页面渲染了。
12、延迟渲染”BELOW一THE一FOLD”内容
可以确定的是如果我们将不可见区域的内容延迟加载,那么页面就会更快地展现在用户面前,这个区域叫做“belowthefold”,为了减少页面加载后需要重新访问的内容,可以将图片替换为正确的高宽所标记的
标签。
一些好的Javascript库可以用来处理这些below一the一fold延迟加载的图像。
13、延迟读取和执行的脚本
在一些移动设备上,解析Javascript代码的速度能达到100毫秒每千字节,许多脚本的库直到页面被渲染以后都是不需要的加载的,下载和解析这些脚本可以很安全地被推迟到onload事件之后来做。
例如,一些需要用户交互的行为,比如托和拽,都不大可能在用户看到页面之前被调用,相同的逻辑也可以应用在脚本执行上面,尽量将脚本的执行延迟到onload事件之后,而不是在初始化页面中重要的可被用户看到的内容的时候执行。
许多第三方的框架现在提供延迟加载的异步版本的API,开发者只需要将原先的逻辑转化到这个异步版本,一些JavaScript要做延迟加载会有些复杂,因为在onload之后执行这些脚本需要注意很多注意事项(例如,你有个脚本需要绑定到onload事件上,你需要做什么?如果你将脚本延迟到onload事件之后,就一定就会失去很多执行的时机)。
14、使用Ajax来增强进程
Ajax(AsynchronousJavaScriptandXML)是一项使用XHR(XMLHttpRequest)对象来从Web服务器上获取数据的技术,它并不需要更新正在运行的页面,Ajax能更新页面上的某个部分而不需要重新构建整个页面,它通常用来提交用户的交互相应,但是也可以用来先加载页面的框架部分,然后当用户准备好浏览网页的时候再填充详细的内容。
尽管是这个名字,但是XMLHttpRequest并不强制要求你只能使用XML,你可以通过调用overrideMineType方法来制定“application/json”类型来使用json替换XML,使用JSON.parse会比使用原生的eval()函数快了几乎两倍,并且更为安全。
同时,切记Ajax的返回响应也会得益于那些应用在普通的返回响应的优化技术上面,确保对你的Ajax返回响应使用了缓存头,简化,gzip压缩,资源合并等技术。
由于这个技术是根据具体应用不同而不同的,所以很难量化,或许由于跨域问题,你需要使用XHR2,这个技术能使用外部域的资源,从而能进行跨域的XHR请求。
15、根据网络状况进行适配处理
由于使用更多带宽会使用更多移动网络的费用,所以只有能检测网络的类型才能使用针对特定网络的优化技术。
例如,预加载未来使用到的请求是非常聪明的做法,但是如果用户的带宽很稀有,并且加载的有些资源是永远不会用到的话,这个技术就是不合理的了。
在Android2.2+,navigator.connection.type属性的返回值能让你区分Wifi和2G/3G/4G网络,在Blackberry上,blackberry.network也能提供相似的信息,另外,服务端通过检测请求中的User一Agent头或者其他的嵌入到请求中的信息能让你的应用检测到网络状况。
16、对多线程来说尽量使用HTML5的WEBWORKER特性
HTML5中的WebWorker是使用多个线程并发执行Javascript程序,另外,这种特别的多线程实现能减少困惑开发者多年的,在其他平台上遇到的问题,例如,当一个线程需要改变一个正在被其他线程使用的资源该如何处理,在WebWorker中,子线程不能修改主用户界面(UI)线程使用的资源。
对提高移动站点的性能来说,WebWorker中的代码很适合用来预处理用户完成进一步操作所需要的资源的,特别是在用户的带宽资源不紧缺的情况下,在低处理器性能的移动设备上,过多的预加载可能会干扰当前页面的UI响应,使用多线程代码,让WebWorker对象(并且尽可能使用localStorage来缓存数据)在另外一个线程中操作预加载资源,这样就能不影响当前的UI表现了。
要特别说明的是,WebWorker只在Android2.0以上的版本实现,而且iphone上的ios5之前的版本也不支持,在桌面PC上,总是落后的IE只在IE10才支持WebWorker。
虽然这项技术并不是非常难实现,但是对WebWorkers来说,有一些限制需要强制遵守,WebWorkers不能进入到页面的DOM,也不能改变页面上的任何东西,WebWorker很适合那种需要后台计算和处理的工作。
17、将CLICK事件替换成TOUCH事件
在触摸屏设备上,当一个用户触碰屏幕的时候,onclick事件并没有立即触发,设备会使用大约半秒(大多数设备差不多都是300毫秒)来让用户确定是手势操作还是点击操作,这个延迟会很明显地影响用户期望的响应性能,要使用touchend事件来替换才能解决,当用户触碰屏幕的时候,这个事件会立即触发。
为了要确保不会产生用户不期望的行为,你应该也要使用touchstart和touchmove事件,例如,除非同时有个touchstart事件在button上,否则不要判断touchend事件在button上就意味着点击行为,因为用户有可能从其他地方触碰开始,然后拖拽到button上触碰结束的,你也可以在touchstart事件之后使用touchmove事件来避免将touchend事件误判为点击,当然前提是需要假设拖拽的手势并不是预期产生点击行为。
另外,你也需要去处理onclick事件来让浏览器改变button的外观从而标识为已点击的状态,同时你也需要处理那些不支持touch事件的浏览器,为了避免代码在touchend和onclick代码中重复执行,你需要在确保用户触碰事件已经在touchend执行了之后,在click事件中调用preventDefault和stopPropagation方法。
这种技术需要更多工作才能在一个页面中增加和维护链接,touch事件的代码必须考虑其他手势,因为替换click的还有可能是缩放或者敲击动作。
18、支持SPDY协议
应用层HTTP和HTTPS协议导致的一些性能瓶颈,使得不论是桌面还是移动端的网站都非常难受,在2009年,谷歌开始研发一种叫做SPDY(谐意是“speedy”)的协议来替换已有的协议,这种协议宣称能突破这些限制,这个协议的目标是让多种浏览器和多种Web服务都能支持,所以这个协议是开源的,但是初步地,只有Google的Chrome浏览器(在版本10及之后的)和google的站点支持,一旦一个Web服务支持SPDY,那么它上面的所有站点都可以和支持这个协议的浏览器使用SPDY进行交互,将SPDY应用在25个top100的Internet网站上,Google收集到的数据是网站的速度会改善27%到60%不等。
或许SPDY中最变革性的发明就是流是双向的,并且可以由客户端或者服务端发起,这样能使得信息能推送到客户端,而不用由客户端发起第一次请求,例如,当一个用户第一次浏览一个站点,还没有任何站点的缓存,这个时候服务端就可以在响应中推送所有的请求资源,而不用等候每个资源被再次独立请求了,作为替换协议,服务端可以发送暗示给客户端,提示页面需要哪些资源,同时也允许由客户端来初始化请求。即使是使用后一种这样的方式也比让客户端解析页面然后自己发现有哪些资源需要被请求来得快。
虽然SPDY并没有对移动端有什么特别的设置,但是移动端有限的带宽就使得如果支持SPDY的话,SPDY在减少移动网站的延迟是非常有用的。
依据网站和服务的环境来进行平稳操作或进一步考虑,Google有一个SPDY模块支持Apache2.2–mod_spdy–这个模块是免费的;但是mod_spy有线程上的问题,并且和mod_php协作并不是很好,所以要求你使用这个技术的时候要确保你的网站的正常运行。
六十四、请实现鼠标点击任意标签,alert该标签的名称(注意兼容性)
functionelementName(evt){
evt=evt||window.event;
varselected=evt.target||evt.srcElement;
alert(selected.tagName);
六十五、对string对象进行扩展,使其具有删除前后空格的方法
String.prototype.trim=function(){
returnthis.replace(/(^\s*)|(\s*$)/g,"");
六十六、常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?
1)bootstrap,easyUI,highcharts和echarts,jqueryUI,jquery、angular.js,vue.js,reactjs等。
2)前端开发工具:gulpwebpack
3)轮播插件,拖拽插件
六十七、用一句话概述您的优点,用一句话概述您的缺点
自由发挥
六十八、描述下你对js闭包。面向对象、继承的理解
1)闭包理解:
个人理解:闭包就是能够读取其他函数内部变量的函数;
使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭包,只有函数才会产生作用域的概念
闭包有三个特性:
1.函数嵌套函数
2.函数内部可以引用外部的参数和变量
闭包常见用途:
创建特权方法用于访问控制
事件处理程序及回调
2)面向对象:
面向对象编程,即OOP,是一种编程范式,满足面向对象编程的语言,一般会提供类、封装、继承等语法和概念来辅助我们进行面向对象编程。
参考:
3)继承:
对象继承分两种情况,一种是构造函数的继承,一种是原型(prototype)的继承:
1.构造函数的继承,比较简单,只需要在子对象中添加代码:parent.apply(this,arguments);
关于原型的继承最优化的方法,利用空对象作为中介
2.拷贝继承
可参考:
六十九、你做的页面在哪些浏览器测试过?这些浏览器的内核分别是什么?
IE内核浏览器:360,傲游,搜狗,世界之窗,腾讯TT。
非IE内核浏览器:firefoxoperasafarichrome。
IE浏览器的内核Trident、Mozilla的Gecko、Chrome的Blink(WebKit的分支)、Opera内核原为Presto,现为Blink;
七十、写出几种IE6bug的解决方法
1)png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.也可以引用一段脚本处理.
2)IE6双倍边距bug:在该元素中加入display:inline或display:block3)像素问题使用多个float和注释引起的使用dislpay:inline一3px4)超链接hover点击后失效使用正确的书写顺序linkvisitedhoveractive5)z一index问题给父级添加position:relative6)Min一height最小高度!Important解决’7.select在ie6下遮盖使用iframe嵌套7)为什么没有办法定义1px左右的宽度容器(IE6默认的行高造成的,使用over:hidden,zoom:0.08line一height:1px)
七十一、清楚浮动的几种方法,各自的优缺点
1、父级div定义伪类:after和zoom
.div1{background:#000080;border:1pxsolidred;}
.div2{background:#800080;border:1pxsolidred;height:100px;margin一top:10px}
.left{float:left;width:20%;height:200px;background:#DDD}
.right{float:right;width:30%;height:80px;background:#DDD}
/*清除浮动代码*/
.clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0}
.clearfloat{zoom:1}
Left
Right
div2
原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE转有属性)可解决ie6,ie7浮动问题。
优点:浏览器支持好,不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)。
缺点:代码多,不少初学者不理解原理,要两句代码结合使用,才能让主流浏览器都支持。
建议:推荐使用,建议定义公共类,以减少CSS代码。
2、父级div定义overflow:hidden
.div1{background:#000080;border:1pxsolidred;/*解决代码*/width:98%;overflow:hidden}
.div2{background:#800080;border:1pxsolidred;height:100px;margin一top:10px;width:98%}
原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度。
优点:简单,代码少,浏览器支持好。
缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。
建议:只推荐没有使用position或对overflow:hidden理解比较深的朋友使用。
3、结尾处加空div标签clear:both
.div1{background:#000080;border:1pxsolidred}
.clearfloat{clear:both}
原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度。
优点:简单,代码少,浏览器支持好,不容易出现怪问题。
缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不爽。
建议:不推荐使用,但此方法是以前主要使用的一种清除浮动方法。
4、父级div定义height
.div1{background:#000080;border:1pxsolidred;/*解决代码*/height:200px;}
原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。
优点:简单,代码少,容易掌握。
缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题。
建议:不推荐使用,只建议高度固定的布局时使用。
5、父级div定义overflow:auto
.div1{background:#000080;border:1pxsolidred;
/*解决代码*/width:98%;overflow:auto}
.div2{background:#800080;border:1pxsolidred;height:100px;margin-top:10px;width:98%}
原理:必须定义width或zoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度。
缺点:内部宽高超过父级div时,会出现滚动条。
建议:不推荐使用,如果你需要出现滚动条或者确保你的代码不会出现滚动条就使用吧。
七十二、Javascript的typeof返回哪些数据类型;列举3种强制类型转换和2中隐式类型转换
1)返回数据类型
undefined
string
boolean
number
Object
Function
2)强制类型转换
Number(参数)把任何类型转换成数值类型。
parseInt(参数1,参数2)将字符串转换成整数
parseFloat()将字符串转换成浮点数字
string(参数):可以将任何类型转换成字符串
Boolean()可以将任何类型的值转换成布尔值。
3)隐式类型转换
1.四则运算
加法运算符+是双目运算符,只要其中一个是String类型,表达式的值便是一个String。
对于其他的四则运算,只有其中一个是Number类型,表达式的值便是一个Number。
对于非法字符的情况通常会返回NaN:
'1'*'a'//=>NaN,这是因为parseInt(a)值为NaN,1*NaN还是NaN
2.判断语句
判断语句中的判断条件需要是Boolean类型,所以条件表达式会被隐式转换为Boolean。其转换规则同Boolean的构造函数。比如:
varobj={};if(obj){
while(obj);}
3.Native代码调用
JavaScript宿主环境都会提供大量的对象,它们往往不少通过JavaScript来实现的。JavaScript给这些函数传入的参数也会进行隐式转换。例如BOM提供的alert方法接受String类型的参数:
alert({a:1});//=>[objectObject]
七十三、写出3个使用this的典型应用
1.
functionThing(){}
Thing.prototype.foo="bar";
Thing.prototype.logFoo=function(){
console.log(this.foo);
Thing.prototype.setFoo=function(newFoo){
this.foo=newFoo;
varthing1=newThing();
varthing2=newThing();
thing1.logFoo();//logs"bar"
thing2.logFoo();//logs"bar"
thing1.setFoo("foo");
thing1.logFoo();//logs"foo";
thing2.logFoo();//logs"bar";
thing2.foo="foobar";
thing2.logFoo();//logs"foobar";
2.
functionThing1(){}
Thing1.prototype.foo="bar";
functionThing2(){
this.foo="foo";
Thing2.prototype=newThing1();
functionThing3(){}
Thing3.prototype=newThing2();
varthing=newThing3();
console.log(thing.foo);//logs"foo"
3.
functiondoIt(){
onsole.log(this.foo);
doIt.apply(this);
functiondoItIndirectly(method){
method();
varthing=newThing();
doItIndirectly(thing.logFoo.bind(thing));//logsbar
七十四、对前端界面工程师这个职位是怎么理解的?它的前景怎样?
前端工程师属于一个比较新兴的技术,各种技术层出不穷,随着客户体验的重要性前端需要掌握的技能也越来越多,对前端的要求也越来越多,而且我们前端是最贴近用户的程序员,主要负责实现界面交互,提升用户体验,而且有了Node.js,前端可以实现服务端的一些事情,针对服务器的优化、拥抱最新前端技术,除了掌握必要的技能还要掌握用户的心理,善于沟通。
七十五、Eval函数的作用
eval可以将字符串生成语句执行,一般执行动态的js语句。eval的使用场合:有时候我们预先不知道要执行什么语句,只有当条件和参数给时才知道执行什么语句,这时候eval就派上用场了。
七十六、标签上title与alt属性的区别是什么
title是鼠标放上去的额外信息
alt是图片不能正常显示的时候,用文字代替
七十七、对WEB标准以及w3c的理解与认识?
Web标准就是将页面的解构、表现和行为各自独立实现,w3c对标注提出了规范化的要求
1.对结构的要求:(标签规范可以提高搜索引擎对页面的抓取效率,对SEO很有帮助)
1)标签字母要小写;
2)标签要闭合;
3)标签不允许随意嵌套。
2.对css和js的要求:
1)尽量使用外联css样式表和js脚本,使结构、表现和行为分成三块,符合规范,同时提高页面渲染速度,提高用户体验;
2)样式尽量少用行间样式表,使结构与表现分离,标签的id和class命名要做到见文知义,标签越少,加载越快,用户体验更高,代码维护更简单,便于改版;
3)不需要变动页面内容,便可提供打印版本而不需要复制内容,提高网站易用性
七十八、Css选择符有哪些?哪些属性可以继承?优先级算法如何计算?
1.id选择器(#myid)
2.类选择器(.myclassname)
3.标签选择器(div,h1,p)
4.相邻选择器(h1+p)
5.子选择器(ul
6.后代选择器(lia)
7.通配符选择器(*)
8.属性选择器(a[rel="external"])
9.伪类选择器(a:hover,li:nth一child)
可继承:font一sizefont一familycolor,;
不可继承:borderpaddingmarginwidthheight
优先级就近原则,样式定义最近者为准;载入样式以最后载入的定位为准;
优先级为:!important>id>class>tag
important比内联优先级高
七十九、请戳出ie6/7下特有的cssbug
一:li边距“无故”增加
设置ul的显示形式为*display:inline一block;即可,前面加*是只针对IE6/IE7有效
二:IE6不支持min一height属性,但它却认为height就是最小高度
使用ie6不支持但其余浏览器支持的属性!important。
三:Overflow:
在IE6/7中,overflow无法正确的隐藏有相对定位position:relative;的子元素。解决方法就是给外包容器.wrap加上position:relative;。
四:border:none在IE6不起作用:写成border:0就可以了
五:100%高度
在IE6下,如果要给元素定义100%高度,必须要明确定义它的父级元素的高度,如果你需要给元素定义满屏的高度,就得先给html和body定义height:100%;。
六:双边距Bug
当元素浮动时,IE6会错误的的把浮动方式的margin值双倍计算,给float的元素添加一个display:inline
七:躲猫猫bug
定义了:hover的链接,当鼠标移到那些链接上时,在IE6下就会触发躲猫猫。1.在(那个未浮动的)内容之后添加一个2.触发包含了这些链接的容器的hasLayout,一个简单的方法就是给其定义height:1%;
八:IE6绝对定位的元素1px间距bug
当绝对定位的父元素或宽度为奇数时,bottom和right会多出现1px,
解决方案,针对IE6进行hack处理
八十、如何将一个元素600毫秒的速度缓慢向上滑动显示?
如果需要在父元素底部向上,可以利用margin一top把子元素,挤下去,同事父元素设置隐藏,然后改变margintop的值也可以利用定来做,把子元素定位最下边
(function(){
varoDiv=document.createElement('div');
oDiv.style.width='100px';
oDiv.style.height='100px';
oDiv.style.backgroundColor='red';
oDiv.style.position='absolute';
oDiv.style.marginTop=100+'px';
document.body.appendChild(oDiv);
vartimer=setInterval(function(){
varm=parseInt(oDiv.style.marginTop);
if(m==0){
clearInterval(timer);
return;
oDiv.style.marginTop=parseInt(oDiv.style.marginTop)一1+'px';
},600);
})();
八十一、写一个获取非行间样式的函数
FunctiongetStyle(obj,attr){
If(obj.currentStyle){
returnobj.currentStyle[attr];
returngetComputedStyle(obj,false)[attr];
八十二、请用正则表达式验证数字
/[0一9]*$/
八十三、为什么利用多个域名来提供网站资源会更有效?
1)突破浏览器的并发限制(浏览器同一域名最大的并发请求数量为6个,ie6为2个)
2)节约cookie带宽
3)CDN缓存更方便
4)防止不必要的安全问题(尤其是cookie的隔离尤为重要)
5)节约主机域名连接数,优化页面响应速度
八十四、你如何从浏览器的URL中获取参数信息
浏览器宿主环境中,有一个location对象,同时这个对象也是window对象和document对象的属性。
location对象中提供了与当前窗口加载的文档有关的的信息,即URL信息。
location.pathname:返回URL中的目录和文件名(api/sousu)
location.search:返回查询字符串(search=baidu&id=123#2)
location.hash:返回hash值(#2)
八十五、手机端文字大小用什么单位
对于只需要适配少部分手机设备,且分辨率对页面影响不大的,使用px即可
对于需要适配各种移动设备,使用rem,例如只需要适配iPhone和iPad等分辨率差别比较挺大的设备
八十六、是否做过有上百图层的psd切图?ps隐藏其他图层,只显示其中一个图层的快捷键
Alt+当前图层前眼睛
八十七、浏览器标准模式和怪异模式之间的区别是什么?
这是个历史遗留问题,W3C标准推出前,旧的页面都是根据旧的渲染方式对页面进行渲染的,因此在W3C标准推出后为了保证旧页面的正常显示,保持浏览器的兼容性,这样浏览器上就产生了能够兼容W3C标准渲染的严格模式和保证旧页面显示的怪异模式的标准兼容模式。
具体表现:
1.在严格模式中:width是内容宽度,元素真正的宽度=margin一left+border一left一width+padding一left+width+padding一right+border一right一width+margin一right;
在怪异模式中:width则是元素的实际宽度,内容宽度=width一(padding一left+padding一right+border一left一width+border一right一width)
2)可以设置行内元素的高宽
在标准模式下,给span等行内元素设置wdith和height都不会生效,而在怪异模式下,则会生效。
3)可设置百分比的高度
在标准模式下,一个元素的高度是由其包含的内容来决定的,如果父元素没有设置高度,子元素设置一个百分比的高度是无效的。
4)用margin:0auto设置水平居中在IE下会失效
使用margin:0auto在标准模式下可以使元素水平居中,但在怪异模式下却会失效,怪异模式下的解决办法,用text一align属性:
body{text一align:center};#content{text一align:left}
5)怪异模式下设置图片的padding会失效
6)怪异模式下Table中的字体属性不能继承上层的设置
7)怪异模式下white一space:pre会失效
八十八、Javascript同源策略
同源策略是Javascript重要的安全度量标准。它最早出自NetscapeNavigator2.0,其目的是防止某个文档或脚本从多个不同源装载。所谓的同源就是同协议,同主机名,同端口号。
它的精髓很简单:它认为自任何站点装载的信赖内容是不安全的。当被浏览器半信半疑的脚本运行在沙箱时,它们应该只被允许访问来自同一站点的资源,而不是那些来自其它站点可能怀有恶意的资源。
八十九、为什么要有同源限制?
现在网站的JS都会进行压缩,一些文件用了严格模式,而另一些没有。这时这些本来是严格模式的文件,被merge后,这个串就到了文件的中间,不仅没有指示严格模式,反而在压缩后浪费了字节。
九十、了解响应式布局吗?请大体说一说
响应式布局概念:Responsivedesign,意在实现不同屏幕分辨率的终端上浏览网页的不同展示方式。通过响应式设计能使网站在手机和平板电脑上有更好的浏览阅读体验。
设计步骤:
1.设置meta标签
2.根据媒体查询设置样式
3.设置多种视图宽度
4.注意点:
5.宽度使用百分比
6.处理图片缩放问题
九十一、身为以为web前端工程师,你肯定知道现在最流行的前端技术吧,有那些?
Vuejs2.0/Angular2.0/ReactNative/es6//Nodejs
gulp/webpack
九十二、请简述为什么要使用数据库的事务
数据库事务(DatabaseTransaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
九十三、聊一聊前端存储。
老朋友cookie
短暂的sessionStorage
简易强大的localStorage
websql与indexeddb
九十四、BFC
w3c规范中的BFC定义:
浮动元素和绝对定位元素,非块级盒子的块级容器(例如inline一blocks,table一cells,和table一captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的BFC(块级格式上下文)。
在BFC中,盒子从顶端开始垂直地一个接一个地排列,两个盒子之间的垂直的间隙是由他们的margin值所决定的。在一个BFC中,两个相邻的块级盒子的垂直外边距会产生折叠。
在BFC中,每一个盒子的左外边缘(margin一left)会触碰到容器的左边缘(border一left)(对于从右到左的格式来说,则触碰到右边缘)。
BFC的通俗理解:
首先BFC是一个名词,是一个独立的布局环境,我们可以理解为一个箱子(实际上是看不见摸不着的),箱子里面物品的摆放是不受外界的影响的。转换为BFC的理解则是:BFC中的元素的布局是不受外界的影响(我们往往利用这个特性来消除浮动元素对其非浮动的兄弟元素和其子元素带来的影响。)并且在一个BFC中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。
详细参见:
一一一一一一一一前端工程化一一一一一
第一步:$>ssh一keygen一trss一Czhangsan@abc.com
第二步:拷贝公钥到gitlab
第三步:
$>gitconfig—globaluser.namezhangsan
$>gitconfig—globaluser.emailzhangsan@abc.com
第四步:$>gitclonegit@lab.com:org/project.git
第五步:$>gitcheckout一bproject一20170227一zhangsan一bugfix
第六步:修改代码
第七步:gitstatus
第八步:gitadd.
第九步:gitcommit一am‘bugfix’
第十步:
gitpush一一set一upstreamoriginproject一20170227一zhangsan一bugfix
九十六、CSS,JS代码压缩,以及代码CDN托管,图片整合
CSSJS代码压缩:
可以应用gulp的gulp一uglify,gulp一minify一css模块完成;可以应用webpack的UglifyJsPlugin压缩插件完成。
CDN:
内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件。主要特点有:本地Cache加速,镜像服务,远程加速,带宽优化。关键技术有:内容发布,内容路由,内容交换,性能管理。CDN网站加速适合以咨询为主的网站。CDN是对域名加速不是对网站服务器加速。CDN和镜像站比较不需要访客手动选择要访问的镜像站。CDN使用后网站无需任何修改即可使用CDN获得加速效果。
如果通过CDN后看到的网页还是旧网页,可以通过URL推送服务解决,新增的网页和图片不需要URL推送。使用动态网页可以不缓存即时性要求很高的网页和图片。CDN可以通过gi域SVN来管理。
图片整合
九十七、如何利用webpack把代码上传服务器以及转码测试
代码上传:
可以使用sftp一webpack一plugin,但是会把子文件夹给提取出来,不优雅。可以使用gulp+webpack来实现。
转码测试
webpack应用babel来对ES6转码,开启devtool:“source一map"来进行浏览器测试。应用karma或mocha来做单元测试。
九十八、项目上线流程是怎样的?
流程建议
一模拟线上的开发环境
本地反向代理线上真实环境开发即可。(apache,nginx,nodejs均可实现)
一模拟线上的测试环境
模拟线上的测试环境,其实是需要一台有真实数据的测试机,建议没条件搭daily的,就直接用线上数据测好了,只不过程序部分走你们的测试环境而已,有条件搭daily最好。
一可连调的测试环境
可连调的测试环境,分为2种。一种是开发测试都在一个局域网段,直接绑hosts即可,不在一个网段,就每人分配一台虚拟的测试机,放在大家都可以访问到的公司内网,代码直接往上布即可。
一自动化的上线系统
一适合前后端的开发流程
开发流程依据公司所用到的工具,构建,框架。原则就是分散独立开发,互相不干扰,连调时有hosts可绑即可。
简单的可操作流程
一代码通过git管理,新需求创建新分支,分支开发,主干发布一上线走简易上线系统,参见上一节
一通过gulp+webpack连到发布系统,一键集成,本地只关心原码开发
一本地环境通过webpack反向代理的server
一搭建基于linux的本地测试机,自动完成build+push功能
九十九、工程化怎么管理的?
前端工程化可以自动化处理一些繁复的工作,提高开发效率,减少低级错误。
目前前端构建工具很多,综合比较来看,gulp相对来说更灵活,可以做更多的定制化任务,而webpack在模块化方面更完美一些
gulp打造前端工程化方案,同时引入webpack来管理模块化代码,大致分工如下:
gulp:处理html压缩/预处理/条件编译,图片压缩,精灵图自动合并等任务
webpack:管理模块化,构建js/css。
一百、git常用命令
Workspace:工作区
Index/Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
gitinit;(#在当前目录新建一个Git代码库)
gitadd(添加当前目录的所有文件到暂存区)
gitrm–cached[file](#停止追踪指定文件,但该文件会保留在工作区)
gitcommit[file1][file2]-m[message](#提交暂存区的指定文件到仓库区)
gitbranch-a(列出所有本地分支和远程分支)
gitcheckout[branch-name](#切换到指定分支,并更新工作区)
gitstatus(#显示有变更的文件)
gitpush[remote]-tags(#提交所有tag)
一百〇一、git与svn的区别
git是分布式的,svn不是。
git跟svn一样有自己的集中式版本库或服务器。但git更倾向于被使用于分布式模式,克隆版本库后即使没有网络也能够commit文件,查看历史版本记录,创建项目分支等,等网络再次连接上Push到服务器端。
git把内容按元数据方式存储,而svn是按文件。
所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。
git没有一个全局的版本号,svn有。
git的内容完整性优于svn。因为git的内容存储使用的是SHA-1哈希算法。
git可以有无限个版本库,svn只能有一个指定中央版本库。
当svn中央版本库有问题时,所有工作成员都一起瘫痪直到版本库维修完毕或者新的版本库设立完成。
每一个git都是一个版本库,区别是它们是否拥有活跃目录(GitWorkingTree)。如果主要版本库(例如:置於GitHub的版本库)有问题,工作成员仍然可以在自己的本地版本库(localrepository)提交,等待主要版本库恢复即可。工作成员也可以提交到其他的版本库!
一百〇二、webpack和gulp对比
Gulp就是为了规范前端开发流程,实现前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等功能的一个前端自动化构建工具。说的形象点,“Gulp就像是一个产品的流水线,整个产品从无到有,都要受流水线的控制,在流水线上我们可以对产品进行管理。”另外,Gulp是通过task对整个开发过程进行构建。
Gulp和Webpack功能实现对比:从基本概念、启动本地Server、sass/less预编译、模块化开发、文件合并与压缩、mock数据、版本控制、组件控制八个方面对Gulp和Webpack进行对比。
一百〇三、webpack打包文件太大怎么办?
webpack把我们所有的文件都打包成一个JS文件,这样即使你是小项目,打包后的文件也会非常大。可以从去除不必要的插件,提取第三方库,代码压缩,代码分割,设置缓存几个方面着手优化。
一百〇四、谈谈你对webpack的看法
WebPack是一个模块打包工具,你可以使用WebPack管理你的模块依赖,并编绎输出模块们所需的静态文件。它能够很好地管理、打包Web开发中所用到的HTML、JavaScript、CSS以及各种静态文件(图片、字体等),让开发过程更加高效。对于不同类型的资源,webpack有对应的模块加载器。webpack模块打包器会分析模块间的依赖关系,最后生成了优化且合并后的静态资源。
webpack的两大特色:
1.codesplitting(可以自动完成)
2.loader可以处理各种类型的静态文件,并且支持串联操作
webpack是以commonJS的形式来书写脚本滴,但对AMD/CMD的支持也很全面,方便旧项目进行代码迁移。
webpack具有requireJs和browserify的功能,但仍有很多自己的新特性:
1.对CommonJS、AMD、ES6的语法做了兼容
2.对js、css、图片等资源文件都支持打包
3.串联式模块加载器以及插件机制,让其具有更好的灵活性和扩展性,例如提供对CoffeeScript、ES6的支持
4.有独立的配置文件webpack.config.js
6.支持SourceUrls和SourceMaps,易于调试
7.具有强大的Plugin接口,大多是内部插件,使用起来比较灵活
8.webpack使用异步IO并具有多级缓存。这使得webpack很快且在增量编译上更加快
一百〇五、说说你对AMD和Commonjs的理解
CommonJS是服务器端模块的规范,Node.js采用了这个规范。CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。AMD规范则是非同步加载模块,允许指定回调函数。
AMD推荐的风格通过返回一个对象做为模块对象,CommonJS的风格通过对module.exports或exports的属性赋值来达到暴露模块对象的目的。
一百〇六、不想让别人盗用你的图片,访问你的服务器资源该怎么处理?
目前常用的防盗链方法主要有两种:
(2)签名URL:适合喜欢开发的用户
一百〇七、精灵图和base64如何选择?
css精灵,用于一些小的图标不是特别多,一个的体积也稍大,比如大于10K(这个没有严格的界定)。
base64,用于小图标体积较小(相对于css精灵),多少都无所谓。字体图标,用于一些别人做好的图标库(也有少数自己去做的)用起来比较方便,他的图标只能用于单色,图标用只能于一种颜色。
一百〇八、webpack怎么引入第三方的库?
拿jQuery为例:
entry:{
page:'path/to/page.js',
jquery:'node—modules/jquery/dist/jquery.min.js'
newHtmlWebpaekPlugin({
filename:'index.html',
template:'index.html',
inject:true,
chunks:['jquery','page']//按照先后顺序插入script标签
})
一百〇九、如果线上出现buggit怎么操作?
方法1:在当前主分支修改bug,暂存当前的改动的代码,目的是让工作空间和远程代码一致:
Gitstash
修改完bug后提交修改:
gitadd.
gitcommit一m"fixbug1"
gitpush
从暂存区把之前的修改恢复,这样就和之前改动一样了
gitstashpop
这时可能会出现冲突,因为你之前修改的文件,可能和bug是同一个文件,如果有冲突会提示:
Auto一mergingxxx.Java
CONFLICT(content):Mergeconflictinxxx.java
前往xxx.java解决冲突
注意stashpop意思是从暂存区恢复到工作空间,同时删除此条暂存记录。
方式2:拉一个新分支,老司机都推荐这样做,充分利用了git特性,先暂存一下工作空间改动:
gitstash
新建一个分支,并且换到这个新分支
gitbranchfix_bug//新建分支
gitcheckoutfix_bug//切换分支
这时候就可以安心的在这个fix_bug分支改bug了,改完之后:
gitcommit一m"fixabug"
切换到master主分支
gitcheckoutmaster
从fix_bug合并到master分支
gitmergefix_bug
提交代码
然后从暂存区恢复代码
此时如有冲突,需要解决冲突
一百一十、用过Nginx吗?都用过哪些?
nginx是一个高性能的HTTP和反向代理服务器。
常使用场景:
(1)反向代理
(2)网站负载均衡
一百一十一、iscroll安卓低版本卡顿,如何解决?
方案一:iScrollv5.1.3设置momentum:true
方案二:配置probeType
方案三:开启硬价加速:给scroll元素增加css样式:一webkit一transform:translate3d(0,0,0);
方案四:判断手机版系统版本,应用原生CSS:overflow:scroll一y
一百一十二、移动布局自适应不同屏幕的几种方式
(1)响应式布局
(2)100%布局(弹性布局)
(3)等比缩放布局(rem)
一百一十三、请说下移动端常见的适配不同屏幕大小的方法?
响应式布局
简而言之,就是页面元素的位置随着屏幕尺寸的变化而变化,通常会用百分比来定位,而在设计上需要预留一些可被“压缩”的空间。
Cover布局
就跟background一size的cover属性一样,保持页面的宽高比,取宽或高之中的较小者占满屏幕,超出的内容会被隐藏。此布局适用于主要内容集中在中部,边沿无重要内容的设计。
Contain布局
同样,也跟background一size的contain属性那样,保持页面的宽高比,取宽或高之中的较大者占满屏幕,不足的部分会用背景填充。个人比较推荐用这种方式,但在设计上需要背景为单色,或者是可平铺的背景。
一百一十四、你们做移动端平时在什么浏览器上测试?
一百一十五、说说移动端是如何调试的?
移动端调试:
(1)模拟手机调试
(2)真机调试之android手机+Chrome
(3)真机调试之iphone+safari⑷UC浏览器
(2)debuggap
(3)抓包
一百一十六、ICONFONT使用及其利与弊?
把一些零散的icon做成字体。我们调用文字的时候,渲染出来的就是icon图像,这样的显示就是iconfont(字体图标)
好处:
一百一十七、说说移动端Web分辨率
从以下几个方面做答:
(1)pc到移动,渲染的变迁
(2)可以更改的布局宽度
(3)再次变迁的像素
(4)又一次变迁
(5)是时候说说安卓了
性能和效率
一百一十八、你平时如何评测你写的前端代码的性能和效率。
ChromeDevTools的Timeline:是用来排查应用性能瓶颈的最佳工具。
ChromeDevTools的Audits:对页面性能进行检测,根据测试的结果进行优化。
第三方工具Yslow。
一百一十九、如何优化页面,加快页面的加载速度(至少5条)
(1)优化图片资源的格式和大小
(2)开启网络压缩
(3)使用浏览器缓存
(4)减少重定向请求
(5)使用CDN存储静态资源
(6)减少DNS查询次数
(7)压缩css和js内容
一百二十、怎么保证多人开发进行内存泄漏的检查(内存分析工具)
1)使用xcode里面的Analyze进行静态分析
buildsetting----》automa----》mrc环境
product----》analyze----》command+R
2)为避免不必要的麻烦,多人开发的时候尽量使用ARC
内存泄露:
一百二十一、前后端性能如何调优?
2.使用内容分布式网络
3.给头部添加一个失效期或者Cache一Control
4.Gzip压缩组件
5.把样式表放在前面
6.把脚本放在最后
7.不使用CSS表达式
8.使用外部的JavaScript和CSS
9.减少DNS的查询
10.缩小JavaScript和CSS
(1)合并JS、CSS文件
(2)合并图片csssprite
(3)使用Imagemaps
(4)data嵌入图片:如base64
Web安全
一百二十三、你所了解到的Web攻击技术
(1)XSS攻击
(2)CSRF攻击
(3)网络劫持攻击
(4)控制台注入代码
(5)钓鱼
一百二十四、如何防止XSS攻击?
(1)将前端输出数据都进行转义
(2)将输出的字符串中的\反斜杠进行转义
(3)从url中获取的信息,防止方法是由后端获取,在前端转义后再行输出
(4)使用cookie的HttpOnly属性,保护好cookie
1.过滤输入2.转义输出
一百二十五、项目中有没有用过加密,哪种加密算法?
项目中没有用过,但我了解几个加密算法:
(1)RSA加密
(2)MD5加密
(3)SHA256加密
一百二十六、聊一聊网页的分段传输与渲染
从下面几个方面说:
(1)CHUNKED编码
(2)BIGPIPE
(3)分段传输与bigpipe适用场景
一百二十七、百度移动端首页秒开是如何做到的?
从几个方面优化:
(1)静态文件放置
(2)缓存
(3)外链
(4)缓存DOM
(5)使用iconfont
(6)卡片的异步加载与缓存
(7)不在首屏的就要异步化
(8)少量静态文件的域名
一百二十八、前端速度统计(性能统计)如何做?
回答下面的两个问题:
(1)网站都有哪些指标?
(2)如何统计自己网站的这些指标?
架构
一百二十九、如果让你来制作一个访问量很高的大型网站,你会如何来管理所有css、js文件、图片?
(1)遵循自定的一套CSS,JS和图片文件和文件夹命名规范
(2)依托采用的前端工程化工具,依照工具脚手架规范(gulp,webpack,grunt,yeoman)
(3)依据采用的框架规范(Vue,React,jQuery)
一百三十、如果没有框架、怎么搭建你的项目
应用原生JS自己尝试搭建一个MVC架构:
(1)基本模块
common:公共的一组件,下面的各模块都会用到
config:配置模块,解决框架的配置问题
startup:启动模块,解决框架和Servlet如何进行整合的问题
plugin:插件模块,插件机制的实现,提供IPlugin的抽象实现
routing:路由模块,解决请求路径的解析问题,提供了IRoute的抽象实现和基本实现
controller:控制器模块,解决的是如何产生控制器
model:视图模型模块,解决的是如何绑定方法的参数
action:action模块,解决的是如何调用方法以及方法返回的结果,提供了IActionResult的抽象实现和基本实现
view:视图模块,解决的是各种视图引擎和框架的适配
filter:过滤器模块,解决是执行Action,返回IActionResult前后的AOP功能,提供了IFilter的抽象实现以及基本实现
扩展模块filters:一些IFilter的实现
results:―些IActionResult的实现
routes:―些IRoute的实现
plugins:—些IPlugin的实现
一百三十一、在选择框架的时候要从哪方面入手
(1)jQuery
项目功能比较简单。并不需要做成一个单页面应用,就不需要MV*框架。项目是一个遗留系统。与其使用其他框架来替换,不如留着以后重写项目。
(2)AngularJS
当我们在制作一个应用,它对性能要求不是很高的时候,那么我们应该选择开发速度更快的技术栈AngularJS,她拥有混合开发能力的ionic框架。对于复杂的前端应用来说,基于Angular.js应用的运行效率,仍然有大量地改进空间。Angular2需要学习新的语言,需慎重选择。
(3)React
选择React有两个原因,一是通过VirtualDOM提高运行效率,二是通过组件化提高开发效率。大型项目首选。选择React还有_个原因是:ReactNative、ReactVR等等,可以让React运行在不同的平台之上。我们还能通过React轻松编写出原生应用,还有VR应用。
令人遗憾的是React只是一个View层,它是为了优化DOM的操作而诞生的。为了完成一个完整的应用,我们还需要路由库、执行单向流库、webAP丨调用库、测试库、依赖管理库等等,为了完整搭建出一个完整的React项目,我们还需要做大量的额外工作。
(4)Vue.js
对于使用Vue.js的开发者来说,我们仍然可以使用熟悉的HTML和CSS来编写代码。并且,Vue.js也使用了VirtualD〇M、Reactive及组件化的思想,可以让我们集中精力于编写应用,而不是应用的性能。
对于没有Angular和React经验的团队,并且规模不大的前端项目来说,Vue.js是一个非常好的选择。
一百三十二、聊一聊前端模板与渲染
(1)页面级的渲染,后端模板
如smarty,这种方式的特点是展示数据快,直接后端拼装好数据与模板,展现到用户面前,对SEO友好。
(2)异步的请求与新增模板,前端模板
如Mustache,ArtTemplate,前端解析模板的引擎的语法,与后端解析模板引擎语法一致。这样就达到了一份HTML前后端一起使用的效果。
混合开发
一百三十三、UIWebView和JavaScript之间是怎么交互的?
有了这个方法我们可以通过objc调用javascript,可以注入javascript。
Js调用〇C方法原理就是利用UIWebView重定向请求,传一些命令到我们的UIWebView,在UIWebView的delegate的方法中接收这些命令,并根据命令执行相应的objc方法。这样就相当于在javascript中调用objc的方法。
在android中,我们有固有组件webview,经过设置可以让它支持我们的js的渲染,然后在代码中设置(WebViewClient/WebChromeClient)让应用跳转页面时在本webview中跳转,通过webview.loadurl(Stringstr)方法可以在需要的地方加载我们前端的页面或者调用前端所定义的方法(wv.loadUrl("javascript:sendDataToAndroid('我是来自js的呦,你看到了吗')");),我们再通过JavascriptInterface接口设置我们前端和android通讯的标识,
wv.addJavascriptInterface(newMJavascriptInterface(getApplicationContext()),"WebViewFunc");
这样前端就可以在页面上调用我们的方法了,funl方法是在android中定义的Window.WebViewFunc.fun1();
总之,前端和android或者ios进行结合开发,我们称之为混合开发,原理就是在原生的开发语言中,我们提供了一个组件webview,这个组件就是我们的原生语言的浏览器,但是我们得自行设置让其能够完美支持我们的应用,需要设置对应的标识,然后连接起来,我们称之为JavascriptInterfac。
一百三十四、混合开发桥接api是怎么调用的,需要引入类库嘛?调用的对象是什么?
Hybrid框架结构
HyBridApp=H5App+Native框架
H5App用来实现功能逻辑和页面渲染Native框架提供WebView和设备接口供H5调用
方案一重混合应用,在开发原生应用的基础上,嵌入WebView但是整体的架构使用原生应用提供,一般这样的开发由Native开发人员和Web前端开发人员组成。Native开发人
员会写好基本的架构以及API让Web开发人员开发界面以及大部分的渲染。保证到交互设计,以及开发都有一个比较折中的效果出来,优化得好也会有很棒的效果。
HybridApp技术发展的早期,Web的运行性能成为主要瓶颈!
为解决性能问题HybridApp走向‘‘重混”。
通过多WebView:实现流畅的多页加载和专场动画。
使用NavtiveUI组件:框架、菜单、日期等。
‘‘重混”的优缺点优点:
一提升了运行性能一增强了交互体验
缺点一
一Web和Native技术交叉混杂一需要同时掌握Web和Native技术,学习难度增加一一个页面有Web组件也有Native组件,编程调试困难
需要引入各自需要的各种依赖工具
方案二:轻混合应用,使用PhoneGap、AppCan之类的中间件,以WebView作为用户界面层,以Javascript作为基本逻辑,以及和中间件通讯,再由中间件访问底层API的方式,进行应用开发。这种架构一般会非常依赖WebView层的性能。
随着时代的发展,手机硬件、浏览器技术、无线网络技术都得到了大幅的提升,H5已经可以支持复杂应用,并拥有良好的运行性能。使用轻混方案的App也越来越多。
目前我们要学习的HybridApp开发就是方案二,使用H5+Js+Native框架开发当前轻混合应用。
Phonegap引入phonegap.js或者cordova.js,对象为navigatorDcloud引入引入mui.js或者其他的js组件,对象为plusapiloud引入各种第三方插件,对象为api
一百三十五、说一下你对支付,推送(远程,本地)的理解
消息的推送主要有两种:
一种是本地推送,主要应用在系统的工具中,例如:闹钟,生日提醒等;实现本地推送需要以下三个步骤,
现推送功能的配置文件,所以想要实现远程推送功能,必须要有开发者账号并且生成配置文件
远程推送流程图如下
一百三十六、什么是代理和通知,写一下他们基本的实现方式
代理:“一对一”,对同一个协议,一个对象只能设置一个代理delegate
六个步骤:
2.遵循协议
3.设置一个代理对象
4.调用代理方法
5.给代理赋值
6.实现代理方法
注意事项:
1.单例对象不能用代理;
2.代理执行协议方法时要使用respondsToSelector检查其代理是否符合
3.协议(检查对象能否响应指定的消息),以避免代理在回调时因为没有实现方法而造成程序崩溃
使用场景:
公共接口,方法较多也选择用delegate进行解耦iOS最常用tableViewDelegate,textViewDelegateiOS有很多例子比如常用的网络库AFNetwork,ASIHTTP库,UlAlertView类。
通知:一对一一对多传值
四个步骤:
1.发送通知
2.创建监听者
3.接收通知
4.移除监听者
1一很多控制器都需要知道一个事件,应该用通知;
2一相隔多层的两个控制器之间跳转
1.一旦接收消息的对象多了,就难以控制了,可能有你不希望的对象接收了消息并做了处理
2.创建了观察者,在dealloc里面一定要移除;
Block:Block是i〇S4.0+和MacOSX10.6+引进的对C语言的扩展,用来实现匿名函数的特性。Blocks语法块代码以闭包得形式将各种内容进行传递,可以是代码,可以是数组无所不能。闭包就是能够读取其它函数内部变量的函数。就是在一段请求连续代码中可以看到调用参数(如发送请求)和响应结果。所以采用Block技术能够抽象出很多共用函数,提高了代码的可读性,可维护性,封装性。
—:动画
二:数据请求回调
三:枚举回调
四:多线程gcd
注意事项:Iblock需要注意防止循环引用
一百三十七、UIViewController的生命周期
1.通过allocinit分配内存,初始化controller.
2.loadView(loadView方法默认实现[superloadView]
3.viewDidLoad(当loadView创建完view之后,此吋view已经完成加载了,会调用viewDidLoad方法;一般我会在这里做界面上的初始化操作,比如添加按钮,子视图,等等.)
4.viewWillAppear(当view在load完之后,将要显示在屏幕之前会调用这个方法,在重写这些方法吋候最好先调用一下系统的方法之后在做操作。)
5.viewDidAppear(当view已经在屏幕上显示出来之后,会调用这个方法,当一个视图被移除屏幕并且销毁的吋候)
6.viewWillDisappear(当视图将要从屏幕上移除吋候调用)
7.viewDidDisappear(当视图已经从屏幕上移除吋候调用)
8.Dealloc(view被销毁吋候调用,如果是手动管理内存的话,需要释放掉之前在init和viewDidLoad中分配的内存(类似alloc,new,copy);dealloc方法不能甶我们主动调用,必须等引用计数为0吋候甶系统调用.)
一百三十八、rem布局字体太大怎么处理?
一般情况下我们设置了html根节点的字体大小作为rem单位的一个基本标准,那么我们可以紧接着在body标签内设置一个字体大小为该应用的基本字体大小
针对于一些机型如果一开始就显示的字体不正常,我们可以通过判断机型然后加载不同的样式
〈scriptlanguage="javascript">
alert(“1”);
varu=navigator.userAgent;
if(u.index〇f('Android')>一1||u.indexOf('Linux')>一1){//安卓手机
alert("安卓手机");
}elseif(u.index〇f('iPhone')>一1){//苹果手机
alert("苹果手机");
}elseif(u.index〇f('WindowsPhone')>一1){//winphone手机alert("winphone手机");
〈/script>
一百三十九、如何调用原生的接口?
首先你得选择一个合适的框架作为自己的基础,以Dcloud为例,页面中一定要存在一个事件,plusready,plusready实际上是原生将桥接js注入到页面中的容器,进行任何方法调用的时候都在plusready之后。所有api方法全部都托管在了一个plus对象中。使用语法plus.模块名称.具体方法(参数,callback)
当我们需要打开系统相册的时候,可以这样做:
Gallery模块管理系统相册,支持从相册中选择图片或视频文件、保存图片或视频文件到相册等功能。通过plus.gallery获取相册管理对象。打开相册plus.gallery.pick进行打开,选取多个图片{multiple:true,maximum:9,system:false}
4.调用统一下单API,生成预付单
6.返回支付参数prepay—id,paySign参数的html文本给前端。
8.确认支付,输入密码,提交支付。
9.步通知商户支付结果,商户收到通知返回确认信息。
11.展示支付信息给用户,跳转到支付结果页面。
一百四十一、混合开发的注意点
增强WebView:原生WebView基本是PC平台浏览器内核的移植,但对于移动场景并不完全适合,各种硬件API得不到HTML5原生支持。因此对于WebView的种种Hack、增强应运而生,甚至出现了基于增强WebView提供第三方服务的。
路由:应用内跳转由于加入了WebView而变得复杂起来,同时由于组件化、模块化带来的问题,路由也成为人们讨论的重点。
缓存:移动网络条件差,为了用户体验,必须要做资源缓存和预加载。
通信:即HTML5和Native之间的通信。利用系统提供的桥接API可以实现,不过在应用上还有着一些坑点和安全问题。
一百四十二、说说你对手机平台的安装包后缀的理解
Android:**apk
Ios:**ipa
Windows:wp7wp8的是xapwp8.1以后用8.1开发的是appx
NodeJS
一百四十三、谈谈你对Socket编程的理解及实现原理,Socket之间是怎么通讯的
A、Socket定义
B、实现原理
在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器(Client/Server,C/S)模式,即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户/服务器模式的建立基于以下两点:首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户/服务器模式的TCP/IP。
C、通讯过程
服务器端:其过程是首先服务器方要先启动,并根据请求提供相应服务:(1)打开一通信通道并告知本地主机,它愿意在某一公认地址上的某端□(如FTP的端口可能为21)接收客户请求;(2)等待客户请求到达该端口;(3)接收到客户端的服务请求时,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统中用fork、exec)。新进程处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。(4)返回第(2)步,等待另一客户请求。(5)关闭服务器客户端:(1)打开一通信通道,并连接到服务器所在主机的特定端口;(2)向服务器发服务请求报文,等待并接收应答;继续提出请求......(3)请求结束后关闭通信通道并终止。
从上面所描述过程可知:(1)客户与服务器进程的作用是非对称的,因此代码不同。(2)服务器进程一般是先启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止。
一百四十四、WEB应用从服务器主动推送Data到客户端有哪些方式?
一般的服务器Push技术包括:
2)HTTPStreaming,通过iframe和〈script〉#签完成数据的传输;
3)TCP长连接
4)HTML5新引入的WebSocket,可以实现服务器主动发送数据至网页端,它和HTTP—样,是一个基于HTTP的应用层协议,跑的是TCP,所以本质上还是个长连接,双向通信,意味着服务器端和客户端可以同时发送并响应请求,而不再像HTTP的请求和响应。
一百四十五、简述Node.js的适用场景?
IIO密集而非计算密集的情景;高并发微数据(比如账号系统)的情景。特别是高并发,Node.js的性能随并发数量的提高而衰减的现象相比其他server都有很明显的优势。
BadUseCases
1.CPUheavyapps(高CPU消耗的app)
2.SimpleCRUD/HTMLapps(简单的CRUD/HTMLapps)
3.NoSQL+Node.js+BuzzwordBullshit(NoSQL+Node.js+各种扯淡的时髦词汇)
GoodUseCases
1.JSONAPI
2.Singlepageapps(单页面app)
3.Shellingouttounixtools(对unix工具的脚本化调用)
4.Streamingdata(流数据)
5.SoftRealtimeApplications(软件实时程序)
一百四十六、什么是HTTPS,做什么用的呢?如何开启HTTPS
1)什么是HTTPS
2)做什么用
加密数据,反劫持,SEO
3)如何开启
生成私钥与证书,配置nginx,重启nginx看效果
一百四十七、你们原来公司如何发送的新消息推送
(参考:)一般的服务器Push技术包括:
2.HTTPStreaming,通过iframe和
THE END
1.法是什么?为什么要守法?法只能是掌握了国家政权的阶级在国家强制力作为根本保障的前提条件下,制定和颁布并具有普遍约束力的统一的社会规范。而且这种社会规范的内容最大限度地反映了社会的物质生活条件并充分体现了执政阶级的整体意志。马克思主义经典作家对法所作的传统解释便与此类似。随着社会的发展进步,法的概念也在不断发展完善。为什么https://baijiahao.baidu.com/s?id=1781901531309788296&wfr=spider&for=pc
2.什么是投入法(什么是投入法和产出法的概念)会计师申请条件是什么?会计师费用是多少?会计师专业都有哪些? 点击咨询本文解答了关于《什么是投入法》相关内容,同时关于1、什么是投入法和产出法,2、什么是投入法,3、什么是投入法和产出法的概念,4、什么是投入法的概念,5、投入法的定义,的相关问答本篇文章福途教育网小编也整理了进来,希望对您有帮助。 什么http://www.designclub.com.cn/185497.html
3.数据分析法的概念数据分析法是什么意思jojo的技术博客数据分析法的概念 数据分析法是什么意思 第五章:数据分析方法 主要内容:数据分析方法 / 数据分析工具 一、数据分析方法 1.1 对比分析法 定义:是指将两个或两个以上的数据进行比较,分析他们的差异,从而揭示这些数据所代表的事物发展变化情况和规律。 对比分析法可以非常直观的看出事物某方面的变化或差距,并且可以准确https://blog.51cto.com/u_12195/9274155
4.22.不同法学流派对于“法是什么”的认识不一。下列关于法概念的描述22.不同法学流派对于“法是什么”的认识不一。下列关于法概念的描述,正确的有()。 A.社会法学派认为,法是公意的体现 B.历史法学派认为,法是主权者的命令 C.古典自然法学派认为,法是理性的体现 D.马克思主义法学认为,法是统治阶级意志的体现答案:CDhttps://m.ha.huatu.com/2021/0618/2144760.html
5.市场营销的概念是什么(解析市场营销复习重点)(一)什么是市场营销? 概念:是企业围绕满足顾客需要,取得利润而开展的一系列与市场有关的经营销售活动。它是一个系统的管理过程,不仅包括生产、经营前的具体经济活动,而且包括生产过程完成以后,进入销售过程的具体经济活动。 (二)营销观念的转变: (1)生产观念:企业的一切经营活动以生产为中心,围绕生产来安排一切业务https://www.niaogebiji.com/article-133481-1.html
6.王人博:《1840年以来的中国》法学院一个最低限度的法治概念——对中国法家思想的现代阐释 一、比较:法家的法思想与“普世主义”法治观 二、中国法家思想的现代阐释 三、民主、宪政与法治概念之区分 水:中国法思想的本喻 一、水与治 二、水的意象与法的隐喻 三、“水舟”之喻与法统 http://fxy.cupl.edu.cn/info/1050/12771.htm
7.回溯法一般方法及n皇后问题回溯算法实验解决皇后问题1.1什么是回溯法 1.2基本概念及术语 1.3回溯法思想、步骤以及形式化描述 1.4回溯法效率分析 2、8-皇后问题 一、一般方法 1、什么是回溯法 例如:迷宫游戏中,我们每次到一个路口可能会有很多种选择,随机选择一种,如果这条路不可行,原路返回至原路口,重新选择 https://blog.csdn.net/weixin_43633784/article/details/106701418
8.头条文章二、法条分析及相关专业名词释义 1、什么是邮电部国家公用电信网提供的国际出入口信道? 2、1996年的“国际出入口信道”的概念在20年间是否发生变化 3、当我们讨论“翻墙行为”究竟是否违法时,我们首先应该讨论什么 4、翻墙行为是否属于私自架设物理信道? https://card.weibo.com/article/m/show/id/2309634607355609547022
9.科学网—[转载]高熵合金催化剂浅谈1.什么是高熵合金? 2004 年,叶均蔚教授首次提出“高熵合金”的概念,为合金材料合成提供了一条新思路。与传统合金不同,高熵合金作为一种新型合金,通常由五种或五种以上元素以等原子比或近等原子比组成,每种元素的含量为 5-35%。近几年,随着对高熵合金的研究探索,其定义越来越宽泛。从组成成分角度来看,现在包含https://blog.sciencenet.cn/blog-3913-1332609.html