新浪前端面试

1、什么是Html语义化?

语义化 div ==> section,div ==> nav(语言自己能解释), input/(关闭符号) br/

相对于样式标记,如 i(样式)/ em(语义);b(样式)/ strong(语义);

为什么需要使用语义化标记?

1、HTML本身就是语义化标记语言,使用符合语义的标记,才谈得上正确使用HTML

2、使用合适的标记,可以合理应用浏览器默认样式

3、有利于SEO(搜索引擎的查询)

4、使用合适的标记是确保可访问性的一个前提

5、更好的可维护性

有哪些方法有利于SEO

渐进增强;

关键词;

实行交换链接;

注册一个经过优化了的关键字域名;

保持网站结构简单

保持你的网站结构简单,网站的浏览者就可以很容易的从一个页面跳到另一个页面。

同时,你的网站对搜索引擎越友好,搜索引擎蜘蛛就越容易抓取你网站内容。

2、行内元素、行内块元素、块级元素分别有哪些标签?分别列举 3 个以上(越多越好)

块级元素 div、p、h1-h6、ul、ol、dl、li、dd、table、hr、blockquote、address、table、menu、pre,HTML5新增的header、section、aside、footer

行内元素 span、label、a、b、lable、input、abbr(缩写)、em(强调)、big、small、cite(引用)、strong、i(斜体)、q(短引用)、textarea、select、sub、sup,u(下划线)

行内块元素 button、img、video、input、textarea

块级元素新开启一行(即使是设置了width属性也是独占一行)、尽可能撑满父级元素的宽度,可以设置width和height属性;table元素浏览器默认的display属性为table。

相邻的行内元素不换行,宽度即为内容的宽度、padding的4个方向都有效(但上下两个方向不影响布局)、margin只有水平方向有效、不可以设置width和height属性。

行内块元素表现其实和块元素一样,只是可以相互挨着;能设置4个方向的margin;

3、请问以下代码的 "标题" 是什么颜色的?

1.head span{color:red;} #head span{color:blue;} #title{color:yellow;} span{color:green;}<br>
2<div id="head" class="head"><span id="title">标题</span></div>  <br>

blue

选择器包含id吗(每个id加1分);选择器包含类或伪类吗(每个类或伪类加1分);选择器包含元素名吗(一个元素名加一分)

4.请写出你知道的清除浮动的方法?

1.父级div定义height;

2.最后一个浮动元素后加空div标签 并添加样式clear:both;

3.包含浮动元素的父标签添加样式 overflow 为 hidden或auto。(创建可以管理浮动元素的BFC)

通过设置父元素overflow值设置为hidden;在IE6中还需要触发 hasLayout ,例如 zoom:1;

4.父元素也设置浮动

5.父元素设置display:table;

6.clearfix;如果你的页面使用bootstrap框架,引入css文件,给父元素添加clearfix便可以清除浮动,这也是平时工作中最常用也是最受程序员喜欢的一种方法,只需添加一个类便可;

5.定位方式有几种?分别是相对什么元素定位的?

1.static 2.float 3.relative 4.absolute 5.fixed

1.static定位(普通流定位) -------------- 默认定位

2.float定位(浮动定位) 例:float:left;

有两个取值:left(左浮动)和right(右浮动)。浮动元素会在没有浮动元素的上方,效果上看是遮挡住了没有浮动的元素,
有float样式规则的元素是脱离文档流的,它的父元素的高度并不能有它撑开。

3.relative定位(相对定位)

相对定位最大的作用是为了实现某个元素相对于本元素的左上角绝对定位,本元素需要设置position为relative。

4.absolute定位(绝对定位)

相对于祖代中有relative(相对定位)并且离本元素层级关系上是最近的元素的左上角进行定位,如果在祖代元素中没有有relative定位的,就默认相对于body进行定位。

注意:当同时有浮动元素和绝对定位元素出现并且浮动元素没有设置z-index,浮动元素是压在绝对定位元素上的,即离用户的视线更近。

5.fixed

6.请实现右图的设计

JavaScript

1.JavaScript 的数据类型有哪些?如何准确检测数据类型?

基本数据类型, 引用数据类型

1.typeof

1typeof 1;//'number'
2typeof true;//'boolean'
3typeof '';//'string'
4typeof undefined;//'undefined'
5typeof function (){};//'function'

typeof是基本数据类型检测利器(但是不包括null) // "object"

2.instanceof是检测引用数据类型,而不能检测引用数据类型

1var arr = [];
2arr instanceof Array;//true

但是只要是在原型链上出现过构造函数都会返回true,所以这个检测结果不很准确

1arr instanceof Object;//true
2Array.isArray(a) // true 准确

3.constructor 构造函数

1var arr = [];
2console.log(arr.constructor === Array);  // true
3console.log(arr.constructor == Object);  // false
4var num = 1;
5console.log(num.constructor === Number); // true

局限性:若把类的原型进行重写,覆盖掉,检测结果就不准确

4.Object.prototype.toString.call();

在Object基本类定义的这个toString()方法,是用来检测数据类型的;

跟字符串、数字、布尔等原型上定义的toString()方法基本用法都是转换字符串的。

1console.log(Object.prototype.toString.call(1));                // [object Number]
2console.log(Object.prototype.toString.call(''));               // [object String]
3console.log(Object.prototype.toString.call(true));             // [object Boolean]
4console.log(Object.prototype.toString.call(null));             // [object Null]
5console.log(Object.prototype.toString.call(undefined));        // [object Undefined]
6console.log(Object.prototype.toString.call([]));               // [object Array]
7console.log(Object.prototype.toString.call({}));               // [object Object]
8console.log(Object.prototype.toString.call(/^$/));             // [object RegExp]
9console.log(Object.prototype.toString.call((function () {}))); // [object Function]

2.以下代码执行结果分别是什么?

113 + '3'                    // '33'
22"23" > "3"                 // false(字符串比较规则)   "23" > 3 // true    
44"abc123".slice(2-1)      // "c12" (负数就是倒数第几个,这里是倒数第一个,但不包含); "abc123".slice(2, 0)//''; "abc123".slice(2, 1)//'';
55"abc123".substring(2-1)  // "ab";  substring()方法会把所有负值参数都转换为0; substring(2, 0) == substring(0, 2)

slice 和 substring 第二个数都不包含

3 以下代码执行结果是什么?

 11
2var foo = 1, bar = 2, j, test
3test = function(j{
4    j = 5;
5    var bar = 5;
6    foo = 5;
7}
8test(10);
9console.log(foo); // 5
10console.log(bar); // 2
11console.log(j);   // undefined !!!

JavaScript 中局部变量只可能通过两种方式声明,一个是作为函数参数,另一个是通过 var 关键字声明。

使用var声明的变量会自动被添加到最接近的环境中。在函数内部,最接近的环境就是函数的局部环境;

bar 和 j(函数参数) 是函数 test 内的局部变量,而对 foo 的赋值将会覆盖全局作用域内的同名变量

 12)
2for(var i=0;i<10;i++){
3    window.setTimeout(function(){
4        console.log(i); // 10个10(后)
5    }, 100);
6}
7console.log(i); // 10 (先)
8
93)
10var length = 10;
11function fn(){
12    alert(this.length);
13}
14
15var obj = {
16    length:5,
17    method:function(){
18        fn();
19    }
20}
21
22obj.method() // 10
23
244)
25function foo(){this.value = 42;};
26foo.prototype = {method:function(){return true;}};
27function bar(){
28    var value = 1;
29    return {method:function(){return value;}};
30};
31foo.prototype = new bar();                   // new bar();由于return 是对象类型,则返回该对象; foo.prototype = {method:function(){return value;}} 相当于重写了原型!!!
32console.log(foo.prototype.constructor);      // Object 
33console.log(foo.prototype instanceof bar)    // false  正确应该是 foo.prototype instanceof Object // true
34var test = new foo();                        // 由于是重写原型之后的实例,因此与重写的原型进行连接
35console.log(test instanceof foo)             // true
36console.log(test instanceof bar)             // false
37console.log(test.method())                   // 1; 与重写的原型进行连接

在构造函数中return基本类型,不会影响构造函数的值;而return对象类型,则会替代构造函数返回该对象

4、如何对数组进行重排?如: [2, [1, 2], 3, "2", "a", "b", "a", [1, 2]],重排后[2, [1,2], 3, "2", "a", b]

 1var arr = [2, [12], 3"2""a""b""a", [12]];
2var arr1 = [],
3    len = arr.length;
4for(let i = 0; i < len; i++) {
5    arr1.push(JSON.stringify(arr[i]));
6}
7
8var arr2 = Array.from(new Set(arr1)),
9    length = arr2.length,
10    arr3 = [];
11for(let i = 0; i < length; i++) {
12    arr3.push(JSON.parse(arr2[i]));
13}
14
15arr3 // [2, [1, 2], 3, "2", "a", "b"]
16// [1, 2] !== [1, 2]

5.要给下面所有 li 元素绑定 click 事件,在鼠标点击每个 li 的时候 alert 该 li 里面的内容;且在鼠标离开外部 ul 元素

范围的时候弹出一个 alert 提示。(实现时请注意代码执行效率即浏览器兼容性、不要使用现成的框架库,用原生 js 编写完成)

 1<ul id="ul">
2    <li>内容1</li>
3    ......此处省略 1000+ 个对象(注:不要使用循环绑定,如果使用循环绑定 1000+ 的绑定事件会很慢)......
4    <li>内容n</li>
5<ul>
6// 委托
7var ul = document.getElementById('ul');
8var items = ul.querySelectorAll('li');
9ul.addEventListener('click', evt=>{
10  var self = evt.target;
11  var inx = Array.from(items).indexOf(self);
12  console.log(items[inx].innerHTML);
13})
14// 另一种实现方式就是闭包;循环绑定
15ul.addEventListener('mouseleave', ()=>{ // 使用mouseleave而不是mouseout
16    alert('离开组件');
17})

综合

1.请从编码和项目实施两个角度谈谈对JS的优化

1.编码

减少DOM访问,避免全局查找;使用事件代理,而不是绑定在每一个子元素上

避免不必要的属性查找(提取)

避免 with 语句(with语句会创建自己的作用域,因此会增加其中执行的代码的作用域链长度)

优化循环

最小化语句数

使用数组和对象字面量而不是构造函数

2.项目实施

减少HTTP请求

打包压缩

本地缓存

将脚本放到页面底部(减少首屏加载时间)

预加载

本地缓存哪几种方式,优势劣势?

2.请谈谈如何对 CSS 性能方面做优化

1.继承

2.集合写 border{solid 1px black};

3.压缩工具

4.高性能选择器

3.页面图片加载太多,一般如何处理?请写出你的代码?如何延迟和预先加载?

懒加载;

懒加载原理

将资源路径赋值到img标签的data-xx属性中,而非直接赋值在src属性

持续判断图片是否在用户当前窗口的可视范围内,从而动态将data-xx的值(url)赋值到src里去

 1//图片懒加载类<br>
2class LazyLoad {
3    constructor(selector) {
4        this.imglis = Array.from(document.querySelectorAll(selector));
5        this.init(); // 初始化
6    }
7
8    // 判断图片是否需要加载
9    load() {
10        let imglis = this.imglis;
11        for (let i = imglis.length; i--;) {
12            if(this.canSeen(imglis[i])) {
13                this.show(imglis[i]);
14                this.del(i);
15            }
16        }
17    }   
18
19    // 判断图片是否在浏览器可视范围内
20    canSeen(el) {
21        let bound = el.getBoundingClientRect();  // 元素相对于视窗的位置集合;有top, right, bottom, left等等属性
22        let clientHeight = window.innerHeight;
23        return bound.top <= clientHeight - 200;  // 为了看效果,加懒加载的图片提前
24    }
25
26    // 显示图片
27    show(el) {
28        let src =el.getAttribute('data-src');
29        el.src = src;
30    }
31
32    // 移除imglis里面已经加载的图片(避免重复判断,减少开销)
33    del(idx) {
34        this.imglis.splice(idx, 1);                   
35    }
36
37    // 当浏览器滚动的时候,继续判断(持续运行load)
38    bindEvent() {
39        window.addEventListener('scroll', ()=>{
40            this.load();
41        })
42    }
43
44    // 初始化
45    init() { 
46        this.load();
47        this.bindEvent();
48    }
49}
50
51// 实例化对象(以懒加载的图片类为选择参数)
52const lazy = new LazyLoad('.lazyload');

4.有无移动端开发经验?

5.您平常看多哪些书:一般通过哪些方式解决问题?

转载于:https://www.cnblogs.com/rencoo/p/9531794.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

poj3278 【BFS】

Catch That CowTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 97240 Accepted: 30519Description Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a num…

表单高级

● 表单高级 ○ 表单字段集<fieldset></fieldset> ■ 功能&#xff1a;相当于一个方框&#xff0c;在字段集中可以包含文本和其他元素。该元素用于对表单中的元素进行分组并在文档中区别标出文本。fieldset元素可以嵌套&#xff0c;在其内部可以在设置多个fieldset…

CMOS图像传感器——TDI CIS

一、面阵与线阵图像传感器 人们在日常生活中见到的相机大多基于普通的面阵图像传感器,这种相机多用来拍摄静止的物体。即使用它们來拍摄运动的物体,也仅仅是缩短了相邻两次拍摄的时间间隔,无需对所拍摄图像进行额外操作,对物体的运动方向和速度也没有限定条件。 除此之外,…

gpio_request 原形代码

其原型为 int gpio_request(unsigned gpio, const char *label) 先说说其参数&#xff0c;gpio则为你要申请的哪一个管脚&#xff0c;label则是为其取一个名字。其具体实现如下&#xff1a; [cpp] view plaincopyprint?int gpio_request(unsigned gpio, const char *label) …

【noip模拟】德充符

时间限制&#xff1a;2s 内存限制&#xff1a;512MB 【题目描述】 申徒嘉和郑子产都是伯昏无人的学生&#xff0c;子产因为申徒嘉是残疾人&#xff0c;非常看不起他&#xff0c;于是想要刁难他。 子产给了申徒嘉 n个数 a1,a2...an。 现在他要求申徒嘉重新排列这些数&#xff0c…

做好数据挖掘模型的9条经验总结

爱数据学习社 welcome数据挖掘是利用业务知识从数据中发现和解释知识(或称为模式)的过程&#xff0c;这种知识是以自然或者人工形式创造的新知识。当前的数据挖掘形式&#xff0c;是在20世纪90年代实践领域诞生的&#xff0c;是在集成数据挖掘算法平台发展的支撑下适合商业分析…

json及JavaBean转json

先来看看JSON&#xff1a; 什么是JSON&#xff1a; JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 JSON是用字符串来表示Javascript对象&#xff0c;例如可以在Servlet中发送一个JSON格式的字符串给客户端Javascript&#xff0c;Javascript可以执行这个字符串…

数字后端——低功耗设计物理实施

一、低功耗设计方案综述 为了实现集成电路的低功耗设计目标&#xff0c;我们需要在系统设计阶段就采用低功耗设计方案&#xff0c;因为随着设计流程的逐步推进&#xff0c;到了芯片设计实现阶段&#xff0c;降低芯片功耗的方法将越来越少&#xff0c;可节省功耗的百分比将不断下…

Eclipse里修改SVN的用户名和密码

删除Eclipse subclipse plugin中记住的SVN用户名密码&#xff1a; 1&#xff09; 查看你的Eclipse中使用的是什么SVN Interface windows > preference > Team > SVN #SVN Interface 2.&#xff09;如果是用的JavaHL, 找到以下目录并删除auth目录. 删除C:\Users\…

Omap3530 的GPIO中断设置

Omap3530 的GPIO中断设置&#xff1a; 1.配置成GPIO&#xff0c;申请GPIO中断 omap_cfg_reg(OMAP3_KBD_GPIO);配置成gpio if (gpio_request(OMAP3_KBD_GPIO, "kbd7279 IRQ") < 0) printk(KERN_ERR "Failed to request GPIO%d for kbd IRQ/n");//申请GPI…

H5项目开发分享——用Canvas合成文字

以前曾用Canvas合成、裁剪、图片等《用H5中的Canvas等技术制作海报》。这次用Canvas来画文字。 下图中“老王考到驾照后”这几个字是画在Canvas上的&#xff0c;与在PS中打入的字非常接近&#xff0c;毫无违和感。 前面一段时间也在研读JavaScript设计模式相关的知识&#xff0…

SQLServer约束介绍

约束定义 对于数据库来说&#xff0c;基本表的完整性约束分为列级约束条件和表级约束条件&#xff1a; 列级约束条件 列级约束条件是对某一个特定列的约束&#xff0c;包含在列定义中&#xff0c;可以直接跟在该列的其他定义之后&#xff0c;用空格分隔&#xff0c;不用指定列名…

CMOS图像传感器——SNR计算

图像质量评价在计算机视觉,人工智能,高清视频传输上面有很广泛的应用。目前,图像质量评价主要分为三个方向,有参考图像的质量评价,半参考的图像质量评价,以及无参考的图像质量评价。许多时候,我们利用CIS采集的RAW DATA本身就是含噪信号,因为我们往往不知道感兴趣的像素…

Java this 关键字的用法

this 关键字的用法 this 在类中就是代表当前对象&#xff0c;可以通过 this 关键字完成当前 对象的成员属性、成员方法和构造方法的调用。 那么何时用 this? 当在定义类中的方法时&#xff0c;如果需要调用该类对象&#xff0c;就可以用 this 来表示这个对象。也就是说&#x…

TMDS——最小化传输差分信号及其协议

过渡调制差分信号&#xff0c;也被称为最小化传输差分信号&#xff0c;是指通过异或及异或非等逻辑算法将原始信号数据转换成10位&#xff0c;前8为数据由原始信号经运算后获得&#xff0c;第9位指示运算的方式&#xff0c;第10位用来对应直流平衡&#xff08;DC-balanced&…

顺大势逆小势策略之代码实现及可行性分析

阅读原文&#xff1a;quant.la/Article/Vie… 前言 资产配置多元化是投资的唯一免费午餐 —— 马克维茨。 在市场中有两种策略&#xff1a;趋势策略和震荡策略。趋势追踪策略的特点在大行情的波动段找到有效的交易信号。而震荡策略则是一种反趋势策略&#xff0c;一波大幅上涨后…

数字图像处理——中值滤波及其改进算法

一、算法介绍 中值滤波器是非线性滤波器的一个例子&#xff0c;它在保留图像特征方面非常有效。 但是&#xff0c;滤波器的窗口大小直接影响中值滤波器的性能。 较小的窗口保留了特征&#xff0c;但会导致噪声抑制的减少。 在较大窗口的情况下&#xff0c;噪声抑制很高&#xf…

Spring整合web开发

正常整合Servlet和Spring没有问题的 public class UserServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ApplicationContext applicationContext new ClassPathXmlApplica…

环信快速集成,以及实际集成中遇到的坑

一.pod集成遇到的问题 1.直接pod 安装 pod EaseUI, :git > https://github.com/easemob/easeui-ios-hyphenate-cocoapods.git 在这个过程中&#xff0c;如果你pod已经安装了sdwebimage&#xff0c;mjrefresh等他自身包含的三方&#xff0c;就需要在你的podfile里面把这个给删…

PAFF 和MBAFF

PAFF 和MBAFF&#xff1a;当对隔行扫描图像进行编码时&#xff0c;每帧包括两个场&#xff0c;由于两个场之间存在较大的扫描间隔&#xff0c;这样&#xff0c;对运动图像来说&#xff0c;帧中相邻两行之间的空间相关性相对于逐行扫描时就会减小&#xff0c;因此这时对两个场分…