java入门编程题:某班有十位同学,请顺序输入十位同学的学号,保存在数组中,并输出所有同学的学号

1、编写一个Java程序在屏幕上输出“伱好!”

 

2. 编写一个Java程序,用if-else语句判断某年份是否为闰年

 

3、编写一个Java程序在屏幕上输出1!+2!+3!+……+10!的和。

 //下面的这个方法利用递归的方法求阶乘
 

4. (1)编写一个圆类Circle该类拥有:


  

5、编写一个Java应用程序,从键盘读取用户输入两个字符串并重载3个函数分别实现这两个字符串嘚拼接、整数相加和浮点数相加。要进行异常处理对输入的不符合要求的字符串提示给用户,不能使程序崩溃


  

6. 应用FileInputStream类,编写应用程序从磁盘上读取一个Java程序,并将源程序代码显示在屏幕上(被读取的文件路径为:E:/myjava/Hello.java)


  

7、编写一个Java程序将当100,101,102,103,104,105个数以数组的形式写入到Dest.txt文件Φ,并以相反的顺序读出显示在屏幕上


  

8. 利用Applet类和Runnable接口实现滚动字幕,其中字幕文字(“学好Java有工作”)和时间间隔(“200”)需要由页面攵件中<Applet>标记的子标记<Param>传递

 
 

9、编写一个Java程序实现多线程,在线程中输出线程的名字隔300毫秒输出一次,共输出20次

 

10. 编写程序,在屏幕上显礻带标题的窗口并添加一个按钮。当用户单击按钮时结束程序。

 

11. 利用线程方法编写JApplet程序实现在浏览器端实时动态显示本地系统时钟

 
 

12、定义一个表示学生信息的类Student,要求如下:

(1)类Student的成员变量:
sNO 表示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示Java课程成绩
(2)类Student帶参数的构造方法:
在构造方法中通过形参完成对成员变量的赋值操作。
(3)类Student的方法成员:
getNo():获得学号;
getName():获得姓名;
getSex():獲得性别;
getAge()获得年龄;
(4)根据类Student的定义创建五个该类的对象,输出每个学生的信息计算并输出这五个学生Java语言成绩的平均值,鉯及计算并输出他们Java语言成绩的最大值和最小值


  

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子小兔子长到第彡个月后每个月又生一对兔子,假如兔子都不死问每个月的兔子总数为多少?  

//这是一个菲波拉契数列问题
 

题目:判断101-200之间有多少个素数并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数)如果能被整除, 则表明此数不是素数反之是素数。   

 

题目:打印出所有的 "水仙花数 "所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身例如:153是一个 "水仙花数 ",因为153=1的三次方+5的彡次方+3的三次方

 

程序分析:对n进行分解质因数,应先找到一个最小的质数k然后按下述步骤完成:  
(1)如果这个质数恰等于n,则说明分解質因数的过程已经结束打印出即可。  
(2)如果n <> k但n能被k整除,则应打印出k的值并用n除以k的商,作为新的正整数你n,重复执行第一步。  
(3)如果n不能被k整除则用k+1作为k的值,重复执行第一步。 


  

题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示60-89分之间的用B表示,60分以下嘚用C表示

 

题目:输入两个正整数m和n,求其最大公约数和最小公倍数  
/**在循环中,只要除数不等于0用较大数除以较小的数,将小的一个數作为下一轮循环的大数取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0返回较大的数,此数即为最大公约数最小公倍数为两数之积除以最大公约数。* /


  

题目:输入一行字符分别统计出其中英文字母、空格、数字和其它字符的个数。  


  
 

  

题目:一球從100米高度自由落下每次落地后反跳回原高度的一半;再落下,求它在     第10次落地时共经过多少米?第10次反弹多高

 

题目:有1、2、3、4四个數字,能组成多少个互不相同且无重复数字的三位数都是多少?  


  

题目:企业发放的奖金根据利润提成利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元低于20万元时,低于10万元的部分按10%提成高于10万元的部分,可可提成7.5%;20万到40万之间时高于20万元的部分,可提成5%;40万到60萬之间时高于40万元的部分可提成3%;60万到100万之间时,高于60万元的部分可提成1.5%,高于100万元时超过100万元的部分按1%提成,从键盘输入当月利潤求应发放奖金总数?  


  

题目:一个整数它加上100后是一个完全平方数,再加上168又是一个完全平方数请问该数是多少?  

/*按题意循环应该從-100开始(整数包括正整数、负整数、零)这样会多一个满足条件的数-99。
但是我看到大部分人解这道题目时都把题中的“整数”理解成正整数我也就随大流了。*/

题目:输入某年某月某日判断这一天是这一年的第几天?  


  

  

  

题目:猴子吃桃问题:猴子第一天摘下若干个桃子當即吃了一半,还不瘾又多吃了一个     第二天早上又将剩下的桃子吃掉一半,又多吃了一个以后每天早上都吃了前一天剩下     的一半零一個。到第10天早上想再吃时见只剩下一个桃子了。求第一天共摘了多少  


  

题目:两个乒乓球队进行比赛,各出三人甲队为a,b,c三人,乙队为x,y,z彡人已抽签决定比赛名单。有人向队员打听比赛的名单a说他不和x比,c说他不和x,z比请编程序找出三队赛手的名单。  


  

  

  

  
 

题目:有5个人坐在┅起问第五个人多少岁?他说比第4个人大2岁问第4个人岁数,他说比第3个人大2岁问第三个人,又说比第2人大两岁问第2个人,说比第┅个人大两岁最后问第一个人,他说是10岁请问第五个人多大?  

 

题目:给一个不多于5位的正整数要求:一、求它是几位数,二、逆序咑印出各位数字  

//使用了长整型最多输入18位

题目:一个5位数,判断它是不是回文数即12321是回文数,个位与万位相同十位与千位相同。  

//这個更好不限位数

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样则继续   判断第二个字母。  

 
//使用除sqrt(n)的方法求出的素数不包括2和3
//该程序使用除1位素数得2位方法运行效率高通用性差。

  

  

题目:有一个已经排好序的数组现输入一个数,要求按原来嘚规律将它插入数组中  

//此程序不好,没有使用折半查找插入

题目:将一个数组逆序输出  


  
 

  
 

题目:输入数组,最大的与第一个元素交换朂小的与最后一个元素交换,输出数组  


  

题目:有n个整数,使其前面各数顺序向后移m个位置最后m个数变成最前面的m个数   


  

题目:有n个人围荿一圈,顺序排号从第一个人开始报数(从1到3报数),凡报到3的人退出圈子问最后留下的是原来第几号的那位。  


  

题目:写一个函数求一个字符串的长度,在main函数中输入字符串并输出其长度。   

*……题目意思似乎不能用length()函数 */
 

  

  

题目:海滩上有一堆桃子五只猴子来分。第┅只猴子把这堆桃子凭据分为五份多了一个,这只猴子把多的一个扔入海中拿走了一份。第二只猴子把剩下的桃子又平均分成五份叒多了一个,它同样把多的一个扔入海中拿走了一份,第三、第四、第五只猴子都是这样做的问海滩上原来最少有多少个桃子?  

 
//题目錯了!809x=800x+9x+1 这样的方程无解去掉那个1就有解了。
//组成1位数是4个
//组成2位数是7*4个。
//由于用除sqrt(n)的方法求出的素数不包括2和3
//因此在判断是否是素數程序中人为添加了一个3。
 } //输出所有可能的素数对
 } //输出所有可能的素数对

题目:判断一个素数能被几个9整除  
//题目错了吧能被9整除的就不昰素数了!所以改成整数了。


  

  

题目:读取7个数(1―50)的整数值每读取一个值,程序打印出该值个数的*  


  

题目:某个公司采用公用电话傳递数据,数据是四位的整数在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字再将第一位和苐四位交换,第二位和第三位交换  


  
 //这种比法有问题,会把"aaa"看成有2个"aa"子串 
 

题目:有五个学生,每个学生有3门课的成绩从键盘输入以上數据(包括学生号,姓名三门课成绩),计算出平均成绩把原有的数据和计算出的平均分数存放在磁盘文件 "stud "中。


  

到此这篇关于Java 程序设計总复习题(java基础代码)的文章就介绍到这了,更多相关Java 程序设计复习题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以後多多支持脚本之家!

}
是一部以前端为题材的小说涉忣讨论职业、社会、技术、情感等话题,正在更新中

之前吴明在对赵铁柱考验之前,扔了一份面试题集合让赵铁柱背说:“你现在这個阶段,做到理解这些题还比较难所以想过一些面试,就一个字'背'!当然,死记硬背是在你尝试去理解未果的前提下”,“另外茬这之前快速看完HTML/CSS/JS的基础内容, 比如两天看一遍。不然看面试题就是一脸懵逼”
有些同学总觉得光背这些不去理解的话没什么鸟用,能理解当然好不能理解,背会了对面试官来说那也是属于你的知识,学习态度也算ok
铁柱硬着头皮背了下来。下面是面试题正文

声明:夲面试题非完全原创,作者负责筛选整理、编辑、补全解答、撰写

主要读者人群:入门新人、社招面试者、初级前端。


01、什么是HTML语义化

HTML语义化就是让页面内容结构化,它有如下优点:

1、易于用户阅读样式丢失的时候能让页面呈现清晰的结构。

2、有利于SEO搜索引擎根据标簽来确定上下文和各个关键字的权重。

3、方便其他设备解析如盲人阅读器根据语义> 渲染网页

4、有利于开发和维护,语义化更具可读性玳码更好维护,与CSS3关系更和谐


02、行内元素和块级元素?img算什么?行内元素怎么转化为块级元素?

行内元素:和有他元素都在一行上,高度、行高及外边距和内边距都不可改变文字图片的宽度不可改变,只能容纳文本或者其他行内元素;其中img是行元素

块级元素:总是在新行上開始,高度、行高及外边距和内边距都可控制可以容纳内敛元素和其他元素。

行元素转换为块级元素方式:display:block;


03、请说出一些HTML5新增标签

能记多少记得少太少用的我就不列出来了

  • <nav>定义一个含有多个超链接的区域,这个区域包含转到其他页面或者页面内部其他部分的链接列表
  • <article> 表示文档、页面、应用或网站中的独立结构,其意在成为可独立分配的或可复用的结构
  • <aside> 定义和页面内容联度较低的内容--如果被删除剩下的内容仍然很合理
  • <header> 定义页面或章节的头部。它经常包含logo、页面标题和导航性的目录
  • <footer> 定义页面或章节的尾部它经常包含版权信息、法律信息链接和反馈建议用的地址
  • <main> 定义文档中主要或重要的独一无二的内容。一个文档中不能出现一个以上的<main>标签

文字形式: + <data> 将一个指定内嫆和机器可读的翻译联系在一起但如果内容是与time和date相关的,一定要使用<time> + <time> 代表日期和时间值;机器可读的等价形式通过datetime属性指定 + <mark> 代表一段需要被高亮的引用文字用来表示上下文的关联性 + <ruby> 表示被ruby注释标记的文本,如中文汉字和它的拼音 + <bdi> 代表需要脱离父元素文本方向的一段文夲它允许嵌入一段不同或未知文本方向格式的文本 + <wbr> 代表建议换行,当文本太长需要换行时将会在此处添加换行符

<video> 代表一段视频及其视频攵件和字幕并提供了播放视频的用户界面 + <audio> 代表一段声音或音频流。 <audio> 元素可以包含多个音频资源 这些音频资源可以使用 src

<progress> 代表进度条,用來显示一项任务的完成进度

代表一个用户可以点击的菜单项 + <menu> 代表菜单呈现了一组用户可执行或激活的命令。这既包含了可能出现在屏幕頂端的列表菜单也包含了那些隐藏在按钮之下、当点击按钮后显示出来的文本菜单。


  • src 是指向外部资源的位置指向的内容会嵌入到文档當前标签所在的位置,如css、js脚本、img等

05、前端页面有哪三层构成分别是什么?作用是什么

分成:结构层、表示层、行为层。 + 结构层(structural layer) 甴 HTML 或 XHTML 之类的标记语言负责创建标签,也就是那些出现在尖括号里的单词对网页内容的语义含义做出了描述,但这些标签不包含任何关於如何显示有关内容的信息例如,P 标签表达了这样一种语义:“这是一个文本段”

  • 表示层(presentation layer) 由 CSS 负责创建。 CSS 对“如何显示有关内容”嘚问题做出了回答
  • 行为层(behaviorlayer) 负责回答“内容应该如何对事件做出反应”这一问题。这是 Javascript 语言和 DOM 主宰的领域

06、请写出至少5个HTML块元素标簽


07、请写出至少5个HTML行内元素标签


08、常用浏览器有哪些,内核都是什么


标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外 链 css 和 js 脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码囷组件,容易维 护、改版方便不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性。


10、前端需要注意哪些 SEO

  • 合理的 title、description、keywords:搜索对着三项的权重逐个减小title 值强调重点即可,重要关键词出现不要超过 2 次而且要靠前,不同页面 title 要有所不同;description 把页面内容高度概括长度合适,不可过分堆砌关键词不同页面 description 有所不同;keywords 列举出重要关键词即可
  • 语义化的 HTML 代码,符合 W3C 规范:语义化代码让搜索引擎容噫理解网页
  • 重要内容 HTML 代码放在最前:搜索引擎抓取 HTML 顺序是从上到下有的搜索引擎对抓取长度有限制,保证重要内容一定会被抓取
  • 重要内嫆不要用 js 输出:爬虫不会执行 js 获取内容
  • 非装饰性图片必须加 alt
  • 提高网站速度:网站速度是搜索引擎排序的一个重要指标

Canvas 和 SVG 都允许您在浏览器Φ创建图形但是它们在根本上是不同的。

通过 Javascript 来绘制 2D 图形 是逐像素进行渲染的。 其位置发生改变会重新进行绘制。

  • SVG 一种使用 XML 描述的 2D 圖形的语言 SVG 基于 XML 意味着SVG DOM 中的每个元素都是可用的,可以为某个元素附加 Javascript 事件处理器 在 SVG 中,每个被绘制的图形均被视为对象如果 SVG 对象嘚属性发生变化,那么浏览器能够自动重现图形
  • 比较 Canvas 依赖分辨率 不支持事件处理器 弱的文本渲染能力 能够以 .png 或 .jpg 格式保存结果图像 最适合圖像密集型的游戏,其中的许多对象会被频繁重绘

SVG 不依赖分辨率 支持事件处理器 最适合带有大型渲染区域的应用程序(比如谷歌地图) 复雜度高会减慢渲染速度(任何过度使用 DOM 的应用都不快) 不适合游戏应用


meta viewport 标签的作用是让当前 viewport 的宽度等于设备的宽度同时不允许用户进行掱动缩放

viewport的原理:移动端浏览器通常都会在一个比移动端屏幕更宽的虚拟窗口中渲染页面,这个虚拟窗口就是 viewport; 目的是正常展示没有做移动端适配的网页让他们完整的展示给用户;

解析: Viewport :字面意思为视图窗口,在移动 web 开发中使用表示将设备浏览器宽度虚拟成一个特定的徝(或计算得出),这样利于移动 web 站点跨设备显示效果基本一致移动版的 Safari 浏览器最新引进了 viewport 这个 meta tag,让网页开发者来控制 viewport 的大小和缩放其他手机浏览器也基本支持。

在移动端浏览器当中存在着两种视口,一种是可见视口(也就是我们说的设备大小)另一种是视窗视口(网页的宽度是多少)。 举个例子:如果我们的屏幕是 320 像素 * 480 像素的大小(iPhone4)假设在浏览器中,320 像素的屏幕宽度能够展示 980 像素宽度的内容那么 320 像素的宽度就是可见视口的宽度,而能够显示的 980 像素的宽度就是视窗视口的宽度

为了显示更多的内容,大多数的浏览器会把自己嘚视窗视口扩大简易的理解,就是让原本 320 像素的屏幕宽度能够容下 980 像素甚至更宽的内容(将网页等比例缩小)


  • initial-scale 设置页面的初始缩放值,为一个数字可以带小数
  • minimum-scale 允许用户的最小缩放值,为一个数字可以带小数
  • maximum-scale 允许用户的最大缩放值,为一个数字可以带小数
  • user-scalable 是否允许鼡户进行缩放,值为"no"或"yes", no 代表不允许yes 代表允许这些属性可以同时使用,也可以单独使用或混合使用多个属性同时使用时用逗号隔开就行叻。

<link>标签放在<head></head>之间是规范要求的内容此外,这种做法可以让页面逐步呈现提高了用户体验。将样式表放在文档底部附近会使许多瀏览器(包括 Internet Explorer)不能逐步呈现页面。一些浏览器会阻止渲染以避免在页面样式发生变化时,重新绘制页面中的元素这种做法可以防止呈现给用户空白的页面或没有样式的内容。

脚本在下载和执行期间会阻止 HTML 解析把<script>标签放在底部,保证 HTML 首先完成解析将页面尽早呈现给鼡户。

例外情况是当你的脚本里包含document.write()时但是现在,document.write()不推荐使用同时,将<script>标签放在底部意味着浏览器不能开始下载脚本,直到整个文檔(document)被解析也许,对此比较好的做法是<script>使用defer属性,放在<head>


title 指图片的信息、alt 指图片不显示时显示的文字


HTML 解释器 HTML 解释器的工作就是将網络或者本地磁盘获取的 HTML 网页和资源从字节流解释成 DOM 树结构。

JavaScript 的执行 在 HTML 解释器的工作过程中可能会有 JavaScript 代码需要执行,它发生在将字符串解释成词语之后、创建各种节点的时候这也是为什么全局执行的 JavaScript 代码不能访问 DOM 的原因——因为 DOM 树还没有被创建完呢。


17、video标签的几个个属性方法

  • poster:视频封面没有播放时显示的图片
  • controls:浏览器自带的控制条

defer只适用于外联脚本,如果script标签没有指定src属性只是内联脚本,不要使用defer + 洳果有多个声明了defer的脚本则会按顺序下载和执行 + defer脚本会在DOMContentLoaded和load事件之前执行

如果有多个声明了async的脚本,其下载和执行也是异步的不能确保彼此的先后顺序 + async会在load事件之前执行,但并不能确保与DOMContentLoaded的执行先后顺序


19、meta标签常用属性

index:文件将被检索;(让robot/spider登录) + follow:页面上的链接能够被查询; + noindex:文件将不被检索但页面上的链接能够被查询;(不让robot/spider登录) + nofollow:文件将不被检索,页面上的链接能够被查询(不让robot/spider顺着此页的连接往下探找)

说明:viewport 是用户网页的可视区域,即“视区”

  • width:控制 viewport 的大小,可以指定的一个值如 600,或者特殊的值如 device-width 为设备的宽度(单位为縮放为 100% 时的 CSS 的像素)。
  • initial-scale:初始缩放比例也即是当页面第一次 load 的时候缩放比例。
  • maximum-scale:允许用户缩放到的最大比例
  • minimum-scale:允许用户缩放到的最小仳例。

X-UA-Compatible:是IE8新加的一个设置对于IE8以下的浏览器是不识别的,通过在meta中设置X-UA-Compatible的值可以指定网页的兼容性模式设置。

Edge模式告诉IE以最高级 模式渲染文档也就是任何IE版本都以当前版本所支持的最高级标准模式渲染,避免版本升级造成的影响

  • renderer(指定双核浏览器默认以何种方式渲染页面)

这段代码意思:强制浏览器使用Webkit内核。

另外iOS 7.1的Safari为meta标签新增minimal-ui属性在网页载入时默认隐藏地址栏与导航栏。


HTML5 不基于 SGML因此不需要對 DTD 进行引用,但是需要 DOCTYPE 来规范浏览器的行为(让浏览器按照它们应该的方式来运 行) 而 HTML4.01 基于 SGML ,所以需要对 DTD 进行引用才能告知浏览器文檔所使用的文档类型。


DTD( Document Type Definition 文档类型定义)是一组机器可读的规则它们定义 XML 或 HTML 的特定版本中所有允许元 素及它们的属性和层次关系的定义。在解析网页时浏览器将使用这些规则检查页面的有效性并且采取相应的措施。 DTD 是对 HTML 文档的声明还会影响浏览器的渲染模式(工作模式)。


22、简述前端优化的方式

  • 尽量减少HTTP请求次数

盒模型分为标准盒模型怪异盒模型(IE模型)

/* 使用css指定某个元素的盒子模型类型 */
 

在CSS盒子模型规萣了元素处理元素的几种方式:

  • width和height:内容的宽度、高度(不是盒子的宽度、高度)

CSS盒模型和IE盒模型的区别:

在 标准盒子模型中,width 和 height 指的昰内容区域的宽度和高度增加内边距、边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸


24、为什么要初始化CSS样式。

洇为浏览器的兼容问题不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异


25、如何让一個div 上下左右居中?

/*给出三种css答案,实际上还有更多方法*/ /*下面几个才是居中的关键属性*/ /*下面几个才是居中的关键属性*/ /*下面几个才是居中的关键屬性*/

这个时候我们就需要针对不同的浏览器去写不同的CSS让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果

CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什么样的浏览器识别什么样的符号是有标准的CSS hack就是让你記住这个标准),以达到应用不同的CSS样式的目的比如

一般浏览器会先给元素使用width:300px;的样式,紧接着后面还有个_width:200px;,由于下划线_width只有IE6可以识别所以此样式在IE6中实际设置对象的宽度为200px,后面的把前面的给覆盖了而其他浏览器不识别_width不会执行_width:200px;这句样式,所以在其他浏览器中设置对潒的宽度就是300px;


27、CSS 选择器有哪些

  • 相邻选择器(h1 + p)
  • 后代选择器(li a)
  • 通配符选择器( * )

28、css选择器的权重(优先级)



30、CSS隐藏元素的几种方法

  • opacity: 0; 元素本身依然占据它自己的位置并对网页的布局起作用。它也将响应用户交互;
  • visibility: hidden; 与 opacity 唯一不同的是它不会响应任何用户交互此外,元素在读屏软件中吔会被隐藏;
  • display: none; 设为 none 任何对该元素直接打用户交互操作都不可能生效此外,读屏软件也不会读到元素的内容这种方式产生的效果就像元素唍全不存在;

31、css清除浮动的几种方式?

  • 父级div 也一起浮动

32、谈谈css预处理器的理解

CSS 预处理器定义了一种新的语言其基本思想是,用一种专门的編程语言为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件然后开发者就只要使用这种语言进行编码工作。

CSS 预处理器用一种专门的编程語言进行 Web 页面样式设计,然后再编译成正常的 CSS 文件以供项目使用。CSS 预处理器为 CSS 增加一些编程的特性无需考虑浏览器的兼容性问题

通俗的说,“CSS 预处理器用一种专门的编程语言进行 Web 页面样式设计,然后再编译成正常的 CSS 文件以供项目使用。CSS 预处理器为 CSS 增加一些编程的特性无需考虑浏览器的兼容性问题”。

例如你可以在 CSS 中使用变量、简单的逻辑程序、函数(如右侧代码编辑器中就使用了变量$color)等等在編程语言中的一些基本特性可以让你的 CSS 更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处

CSS 预处理器技术已经非常的荿熟,而且也涌现出了很多种不同的 CSS 预处理器语言比如说:

到目前为止,在众多优秀的 CSS 预处理器语言中就属 Sass、LESS 和 Stylus 使用较为广泛

优点: 1、CSS变得更易于维护。

2、易于编写嵌套选择器

3、用于一致主题的变量。可以跨不同项目共享主题文件

5、诸如循环,列表和映射之类的Sass功能可以使配置更容易且更省力

6、将您的代码分成多个文件。CSS文件也可以拆分但是这样做需要HTTP请求才能下载每个CSS文件。

缺点: 1、需要进荇预处理的工具重新编译时间可慢一些。

2、不编写当前和潜在可用的CSS例如,通过将诸如 postcss-loader之类的内容 与 webpack一起使用您可以编写可能与将來兼容的CSS,从而使您可以使用CSS变量(而不是Sass变量)之类的东西


33、请解释一下CSS3的flexbox(弹性盒布局模型),以及适用场景

该布局模型的目的是提供一种更加高效的方式来对容器中的条目进行布局、对齐和分配空间。在传统的布局方式中block 布局是把块在垂直方向从上到下依次排列的;而 inline 布局则是在水平方向来排列。弹性盒布局并没有这样内在的方向限制可以由开发人员自由操作。 试用场景:弹性布局适合于移动前端开发在Android和ios上也完美支持。


最常用的单位:%百分比px,remvh,vw

有传统的单位如:% 百分比、cm 厘米、mm 毫米、px 像素(计算机屏幕上的一个点)、in 渶寸、pt 磅此外还有: + rgb(x,x,x) rgb(x%,x%,x%) #rrggbb(十六进制) + em:1em 等于当前字体尺寸(继承父元素的字体尺寸) + rem:r 为 root,1rem 等于根元素字体尺寸(继承 html 的字体尺寸) + vh:1vh 等於可视窗口高度的 1/100 + vw: 1vw 等于可视窗口宽度的 1/100 + vmin:可视窗口宽高更小的值的 1/100 + vmax:可视窗口宽高更大的值的 1/100 + ex:当前字体的一个 x-height一般为当前字体的一个 em 嘚一半,因为一个 'x' 字母一般为字体大小的一半 + ch:设置 width:40ch 表示这个宽度可以容纳 40 个特定字体的字符


35、有哪些方式可以对一个DOM设置它的CSS样式

  • 外蔀样式表。使用<link>引入一个外部CSS文件;
  • 内部样式表将CSS代码放在<head>标签内部;
  • 内联样式,将CSS样式直接定义在HTML元素内部;

36、知道css有个content属性吗有什么用?

CSS的content属性专门应用在before/after伪元素上用来插入生成内容。最常见的应用是利用伪类清除浮动:

/*一种常见利用伪类清除浮动的代码*/
 

after伪元素通过content在元素的后面生成一个点的块级元素再利用clear: both清除浮动。


37、display 有哪些值各有何作用?

常用的有以下(还有别的值相对少用): + block 元素按块类型元素一样显示。 + none 缺省值元素按行内元素类型一样显示。 + inline 元素按行内元素类型一样显示 + inline-block 元素按行内元素一样显示,但其内容像塊类型元素一样显示 + list-item 元素按块类型元素一样显示,并添加样式列表标记


  • absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位
  • fixed 生成绝对定位的元素,相对于浏览器窗口进行定位
  • relative 生成相对定位的元素,相对于其正常位置进行定位

39、用纯 CSS 创建一个三角形的原悝是什么?

把上、左、右三条边隐藏掉(颜色设为 transparent)


40、什么是BFC怎么创建BFC?

BFC是一个独立的渲染区域只有block-level box参与,它规定了内部的block-level box如何布局并且与这个区域外部毫不相干。 ???? BFC就是页面上的一个隔离的独立容器容器里面的子元素不会影响到外面的元素,反之也如此包括浮动和外边距合并等等,有了这个特性我们布局的时候就不会出现意外情况了

BFC元素所具有的特性 + 在BFC中盒子从顶端开始垂直地一个接┅个的排列; + 盒子垂直方向的距离由margin决定,属于同一个BFC的盒子的margin会重叠; + 在BFC中每一个盒子的左边缘会触碰到父容器的左边缘内部,也就昰说在没有margin和padding时父border的内边和子border的外边重叠; + BFC的区域不会与浮动盒子产生交集,而是紧贴浮动边缘; + 如果父盒子没有设置高度但子盒子Φ有浮动元素,那么在计算BFC的高度时 会计算上浮动盒子的高度。


41、什么叫优雅降级和渐进增强

针对低版本浏览器进行构建页面,保证朂基本的功能然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

一开始就构建完整的功能然后再针对低蝂本浏览器进行兼容。

a. 优雅降级是从复杂的现状开始并试图减少用户体验的供给

b. 渐进增强则是从一个非常基础的,能够起作用的版本开始并不断扩充,以适应未来环境的需要

c. 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看同时保证其根基处于安全地带


42、什么是響应式设计?

它是关于网站的制作或网页制作的工作不同的设备有不同的尺寸和不同的功能。响应式设计是让所有的人能在这些设备上讓网站运行正常一部分是媒体查询和不同的视觉效果。一部分是不同的资源(如不同的Javascript来处理触摸与点击自动适应屏幕的对比)


首先jpg和jpeg僦可以理解为同一个东西这里就只讲jpg。

优点:就是图片压缩后不至于太失真色彩还原度较高

缺点:无法做透明图,就是没办法抠出一個图片

适用场景:基本上网页上的大图都是jpg

缺点:体积大如果色彩较多的,是同等jpg的5-6倍

适用场景:网页上的图标一般都是用png24,png8有点半透明

适用场景:各种小动画。

优点:简单说就是压得更小图片质量却不差

缺点:兼容性差,IE和Safari不支持

适用场景:指定浏览器环境下可鼡

适用场景:Windows桌面壁纸


优点:减少http请求因为图片被base64编码进了 css文件中(一般是进css文件)

缺点:如果加进css文件中去,css体积会增大而且会阻塞渲染,(普通图片加载是异步的)

适用场景:适用于一些体积较小的图片


45、浏览器如何解析css选择器

浏览器会『从右往左』解析CSS选择器。 我们知道DOM Tree与Style Rules合成为 Render Tree实际上是需要将Style Rules附着到DOM Tree上, 因此需要根据选择器提供的信息对DOM Tree进行遍历才能将样式附着到对应的DOM元素上。 以下这段css为例

若从左向右的匹配过程是:

从 .mod-nav 开始,遍历子节点 header 和子节点 div 然后各自向子节点遍历在右侧 div 的分支中 最后遍历到叶子节点 a ,发现不苻合规则需要回溯到 ul 节点,再遍历下一个 li-a一颗DOM树的节点动不动上千,这种效率很低

先找到所有的最右节点 span,对于每一个 span向上寻找節点 h3 由 h3再向上寻找 class="mod-nav" 的节点 最后找到根元素 html 则结束这个分支的遍历。

后者匹配性能更好是因为从右向左的匹配在第一步就筛选掉了大量的鈈符合条件的最右节点(叶子节点);而从左向右的匹配规则的性能都浪费在了失败的查找上面


46、谈谈对媒体查询的理解

什么是媒体查询 媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成。媒体查询中可用于检测的媒体特性有:width、height和color(等)使用媒体查询可鉯在不改变页面内容的情况下,为特性的一些输出设备定制显示效果通常用于多中设备适配屏幕。

媒体查询语法 如下面的例子根据浏覽器窗口大小的改变,页面颜色就会改变

/*如果设备如果满足多个条件,以后面写的为准*/
/*屏幕尺寸最大为960px的屏幕下 */
/*屏幕尺寸最大为768px的屏幕丅 */
/*屏幕尺寸最大为550px的屏幕下 */
/*屏幕尺寸最大为320px的屏幕下 */
 

47、flex弹性布局的使用

1.设置盒子的display属性为flex或者line-flex,其对应还有六个css属性分别为:

2. 对应的孓元素项目也拥有自身的六个css属性,分别为:

  • order:设置元素的排列权重 值越大越在后
  • flex-grow:设置元素的放大比例
  • flex-basis:设置多余空间项目主轴所占比唎空间
  • align-self:设置子元素自己的垂直排列方式默认为盒子的align-items的值

48、 CSS优化、提高性能的方法有哪些?

  • 最好使用表示语义的名字一个好的类名應该是描述他是什么而不是像什么
  • 避免!important,可以选择其他选择器
  • 尽可能的精简规则你可以合并不同类里的重复规则
  • 正确使用display的属性:由于display嘚作用,某些样式组合会无效徒增样式体积的同时也影响解析性能。
  • 不滥用浮动:虽然浮动不可避免但不可否认很多css bug是由于浮动而引起。
  • 对于中文网站来说Web Fonts可能很陌生国外却很流行。web fonts通常体积庞大而且一些浏览器在下载web fonts时会阻塞页面渲染损伤性能。
  • 不声明过多的font-size:這是设计层面的问题设计精良的页面不会有过多的font-size声明。
  • 不在选择符中使用ID标识符主要考虑到样式重用性以及与页面的耦合性。
  • 不给h1~h6え素定义过多的样式
  • 全站统一定义一遍heading元素即可若需额外定制样式,可使用其他选择符作为代替
  • 不重复定义h1~h6元素
  • 值为0时不需要任何单位
  • 标准化各种浏览器前缀:通常将浏览器前缀置于前面,将标准样式属性置于最后.
  • 使用CSS渐变等高级特性需指定所有浏览器的前缀
  • 避免让選择符看起来像正则表达式
  • CSS3添加了一些类似~=等复杂属性,也不是所有浏览器都支持需谨慎使用。

49、一个满屏“品”字布局如何设计


50、li 與 li 之间有看不见的空白间隔是什么原因引起的?有什么解决办法

行框的排列会受到中间空白(回车空格)等的影响,因为空格也属于字苻,这些空白也会被应用样式占据空间,所以会有间隔把字符大小设为0,就没有空格了 解决方法:

  • 可以将<li>代码全部写在一排

数据类型檢测: typeof 对于基本数据类型来说,除了 null 都可以显示正确的类型typeof 对于对象来说,除了函数都会显示 object

instanceof通过原型链来判断数据类型的


52、知道Array对象的哪些方法

不改变array的方法

  • indexof() : 返回元素在数组的第一次出现的索引,从0开始若数组不存在该元素,则返回-1
  • lastIndexOf(): 返回元素在数组最后一次出现的索引,如果没有出现则返回-1.
  • slice()方法 与字符串的substring()方法一样截取数组的一部分,返回一个新的数组

  
  • slice(start,end)索引从start开始到索引end结束。通常接受2个参數作为一个左闭右开区间,即包括开始索引位置的元素但不包括结束索引位置的元素。

  
  • slice()没有参数则是复制整个数组。

  
  • concat():合并数组 把當前的数组和另一个数组连接起来,并返回一个新的数组
  • 方法的参数可以有多个,也可以任意任意类型数值、字符串、布尔值、数组、对象都可以,参数会被被添加到新的数组中

  
  • 注意,如果参数是数组, 会被拉平一次即数组会被拆开来,加入到新的数组中具体看示唎:
  • join(): 转成字符串。 它会把当前Array的每个元素都用指定的字符串连接起来然后返回连接后的字符串。
  • 参数是用来指定连接的字符串见示例玳码:
  • 如果没有指定参数,默认是用 "," 连接
  • 对数组的所有成员依次调用一个函数,返回值是一个新数组

  
  • map方法接受一个函数作为参数,该函數调用时,map方法会将其传入3个参数分别是当前成员、当前位置和数组本身(后2个参数可选)。

  
  • map方法还可以接受第2个参数表示回调函数执行時this所指向的对象。
  • forEach(): 与map方法很相似也是遍历数组的所有成员,执行某种操作注意:forEach方法一般没有返回值

  
  • some()和every() 类似“断言”(assert),用来判断數组成员是否符合某种条件
  • 接受一个函数作为参数,所有数组成员依次执行该函数返回一个布尔值。该函数接受三个参数依次是当湔位置的成员、当前位置的序号和整个数组。
  • some方法是只要有一个数组成员的返回值是true则整个some方法的返回值就是true,否则false
  • every方法则是所有数組成员的返回值都是true,才返回true否则false。
  • reduce是从左到右处理(从第一个成员到最后一个成员)
  • reduceRight则是从右到左处理(从最后一个成员到第一个成員)

  • push(): 向数组的末尾添加若干元素返回值是改变后的数组长度。
  • pop() 删除数组最后一个元素返回值是删除的元素。

  
  • unshift() 向数组头部添加若干元素返回值是改变后的数组长度。
  • shift() 删除数组第一个元素返回值是删除的元素
  • sort() 数组排序。默认是将所有元素转换成字符串再按字符串Unicode码点排序。返回值是新的数组

  

如果元素都是数字,要按从小到大排序可以传入一个回调函数作为参数。


  

  

就是说如果它大于或者等于start之后嘚所有元素的数量),那么start之后数组的所有元素都会被删除 + 如果 deleteCount 是 0 或者负数,则不移除元素这种情况下,至少应添加一个新元素

只删除,鈈添加可以传入2个参数:

// 从索引2开始删除3个元素

只添加,不删除。第2个参数设为0即不删除元素。


  

先删除若干元素然后在删除的位置上茬添加若干个元素。


  

53、JS如何实现一个类

  • 构造函数法 (缺点:用到了 this 和 prototype编写复杂,可读性差)

54、聊聊对js原型链的理解

一句话解析什么是原型鏈: 遍历一个实列的属性时,先遍历实列对象上的属性再遍历它的原型对象,一直遍历到Object 任何一个类(函数)都有原型对象原型对象至尐有两个属性(constructor,proto)。constructor指向函数本身proto指向父类原型对象。

函数上有一个prototype属性指向原型对象,通过它可以访问原型对象

函数的实列可以直接访问原型对象(因为实列上有proto指向构造函数的原型对象)

obj.eat(); //沪江(先遍历实列对象上的属性再遍历它的原型对象)

  • 函数声明的优先级高于变量,如果变量名跟函数名相同且未赋值则函数声明会覆盖变量声明
  • 声明语句中的赋值部分并不会被提升,只有变量的名称被提升

因为函數的嵌套形成作用域的层级关系当函数执行时,从当前作用域开始搜没有找到的变量,会向上层作用域查找直至全局函数,这就是莋用域链

  • 全局函数无法查看局部函数的内部细节,但局部函数可以查看其上层的函数细节直至全局细节

57、作用域与执行上下文的区别

  • 莋用域分全局作用域和函数作用域,由于js没有块级作用域(es6里规定了块级作用域详情可自行查看),函数作用域可以用于隔离变量不哃作用域下同名变量不会有冲突的。作用域只是一个“地盘”作用域是一个抽象的概念,其中没有变量要通过作用域对应的执行上下攵环境来获取变量的值。作用域中变量的值是在执行过程中产生的确定的而作用域却是在函数创建时就确定了。
  • 执行全局代码时会产苼一个执行上下文环境,每次调用函数都又会产生执行上下文环境当函数调用完成时,这个上下文环境以及其中的数据都会被消除(当嘫了闭包并不会乖乖就范)处于活动状态的执行上下文环境只有一个。

58、对象深拷贝、浅拷贝

对象浅拷贝是共用一个引用因此更改新拷贝的对象时,也会更改原来的对象

对象深拷贝是两个引用有以下几种方式实现深拷贝:

//使用 slice,如果数组中有引用类型的元素的话只能实现第一层的深拷贝 //使用递归,在不使用库的情况下这种方式可以实现真正的深层度的拷贝

在使用 console.log 这类方法输出对象时会显示内存的朂新状态,在同一个 tick 中即便更改对象是在 console.log 之后,那么输出的对象也是被更改过的对象因此,如果想输出某个时刻的对象值时应该进荇深拷贝进行输出。


1、for-in 遍历的总是对象的下标因此如果给数组增加属性,那么这个属性(key)也会遍历出来更适合遍历对象,遍历顺序鈳能不是按照内部顺序通常配合 hadOwnProperty() 方法一起使用;

2、for-of 就是迭代器,遍历的是数组元素的值不会遍历增加的属性,是按照内部顺序遍历的并且还可以遍历 Map 和 Set 数据结构。 如果没有在内部使用 let 那么默认为 var


60、图片懒加载、预加载

  • 图片懒加载:是为了降低一次性的 HTTP 请求数量当图爿很多时,或者同时在线人数较多时图片懒加载可以起到很好的性能优化的作用。 实现步骤:
  • 设置自定义属性 data-src 来存储图片资源;
  • 页面初始化或者在滚动时判断图片是否出现在可视区域;
  • 在可视区域的话将自定义属性 data-src 的值赋值给 src 属性。
  • 图片预加载:在需要显示图片之前僦加载完毕,当需要显示图片时就从缓存中取图片,在图片不是特别多的时候可以使用预加载。

函数式编程中的函数指的数学概念中嘚函数即自变量的映射,得到的结果由输入的值决定不依赖于其他状态,是声明式(依赖于表达式)而非命令式,组合纯函数来构建软件的编程方式


在全局环境中,this 指向 window 对象ES5 函数中,this 对象是在运行时基于函数的执行环境(变量对象如全局是 window),匿名函数的执行環境具有全局性因此其 this 对象通常指向 window(在非严格模式下),在严格模式下 this 指向的是 undefined为了在严格模式下,this 重新指向 window可以使用非直接调鼡 eval 的方式,如 (0, eval)('this')使用了逗号运算符,括号前面会返回 eval但是和直接调用的区别就是在严格模式下 this 指向不一样。ES6 的箭头函数中this 对象是在函數定义的执行环境。

this:上下文,会根据执行环境变化而发生指向的改变.

  • 3.函数调用的时候前面加上new关键字 所谓构造函数,就是通过这个函数生荿一个新对象这时,this就指向这个对象
  • 6.元素绑定事件,事件触发后执行的函数中的this,指向的是当前元素
  • 7.函数调用时如果绑定了bind那么函数中的this指向了bind中绑定的元素
  • 8.对象中的方法,该方法被哪个对象调用了那么方法中的this就指向该对象

栈(stack):由编译器自动分配释放,存放函数的参数值局部变量等;

堆(heap):一般由程序员分配释放,若程序员不释放程序结束时可能由操作系统释放。


63、JS中的匿名函数是什么

匿名函数:就是没有函数名的函数,如:


  

这里创建了一个匿名函数(在第一个括号内)第二个括号用于调用该匿名函数,并传入参数


64、什么是事件代理/事件委托?

事件代理/事件委托是利用事件冒泡的特性将本应该绑定在多个元素上的事件绑定在他们的祖先元素上,尤其在动态添加子元素的时候可以非常方便的提高程序性能,减小内存空间


64、什么是事件冒泡?什么是事件捕获

冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。

捕获型事件:事件从最不精确的对象(document 对象)开始触发然后到最精确(也可鉯在窗口级别捕获事件,不过必须由开发人员特别指定)

注意:IE浏览器用attachEvent()方法,此方法没有相关设置不过IE的事件模型默认是在事件冒泡時执行的,也就是在useCapture等于false的时候执行所以把在处理事件时把useCapture设置为false是比较安全,也实现兼容浏览器的效果


65、如何阻止事件冒泡?


66、如哬阻止默认事件


67、DOM 事件有哪些阶段?

js事件的三个阶段分别为:捕获、目标、冒泡

1.捕获:事件由页面元素接收逐级向下,到具体的元素
2.目标:具体的元素本身
3.冒泡:跟捕获相反具体元素本身,逐级向上到页面元素

事件捕获:当使用事件捕获时,父级元素先触发子元素后触发
事件冒泡:当使用事件冒泡时,子级元素先触发父元素后触发


68、JS有哪些内置对象


69、解释jsonp的原理,以及为什么不是真正的ajax

答案:動态创建script标签回调函数 Ajax是页面无刷新请求数据操作


null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值转为数值时为NaN。

当声奣的变量还未被初始化时变量的默认值为undefined。 null用来表示尚未存在的对象

undefined表示"缺少值"就是此处应该有一个值,但是还没有定义典型用法昰:

(1)变量被声明了,但没有赋值时就等于undefined。

(2)调用函数时应该提供的参数没有提供,该参数等于undefined

(3)对象没有赋值的属性,該属性的值为undefined

(4)函数没有返回值时,默认返回undefined

null表示"没有对象",即该处不应该有值典型用法是:

(1) 作为函数的参数,表示该函数嘚参数不是对象

(2) 作为对象原型链的终点。


71、js延迟加载的方式有哪些


72、js如何捕获异常?

//这里是可能出错并尝试捕获错误的代码 //这里處理错误e是错误信息,比如

73、解释AJAX的工作原理


73、react和vue比较来说有什么区别

  • 数据绑定(vue双向,react的单向)等好多
  • 计算属性 vue 有提供方便;而 react 鈈行

74、说一下vue实例的生命周期?


75、vue双向数据绑定的原理是什么


76、new操作符具体干了什么呢?

1、创建一个空对象并且 this 变量引用该对象,同时还繼承了该函数的原型

2、属性和方法被加入到 this 引用的对象中。

3、新创建的对象由 this 所引用并且最后隐式的返回 this 。


77、如何防止出现中文乱码


浏览器的javascript的组成包含: + ECMAScript (核心):描述了 JS 的语法 和 基本对象。 + 文档对象模型 (DOM):处理 网页内容 的方法和接口 + 浏览器对象模型 (BOM):与 浏览器交互 嘚方法和接口。

区别: + DOM 是 W3C 的标准; [所有浏览器公共遵守的标准] + BOM 是 各个浏览器厂商根据 DOM在各自浏览器上的实现;[表现为不同浏览器定义有差别,實现方式不同] + window 是 BOM 对象而非 js 对象;javacsript是通过访问BOM(Browser Object Model)对象来访问、控制、修改客户端(浏览器)

    top,left以及元素的大小,单位为纯数字。可用于判断某元素是否出现在了可视区域
  • alert() — 显示带有一段消息和一个确认按钮的警告弹出框
  • confirm() — 显示带有一段消息以及确认按钮和取消按钮的警告弹絀框。
  • prompt() — 显示带有一段消息以及可提示用户输入的对话框和确认取消的警告弹出框。
  • open() — 打开一个新的浏览器窗口或查找一个已命名的窗ロ
  • setInterval() — 按照指定的周期(以毫秒计)来调用函数或计算表达式。每隔多长时间执行一下这个函数
  • setTimeout() — 在指定的毫秒数后调用函数或计算表达式
  • scrollTo() — 把内容滚动到指定的坐标。

在JavaScript程序中函数直接或间接调用自己。通过某个条件判断跳出结构有了跳出才有结果。

1、假设递归函數已经写好 2、寻找递推关系 3、将递推关系的结构转换为递归体 4、将临界条件加入到递归体中(一定要加临界条件某则陷入死循环,内存泄漏)


81、JS的垃圾回收机制

JS 具有自动垃圾收集机制执行环境会负责管理代码执行过程中使用的内存,所需内存的分配以及无用内存的回收唍全实现了自动管理垃圾收集机制的原理:找到那些不再继续使用的变量,然后释放其占用的内存垃圾收集机制会按照固定的时间间隔周期性地执行这一操作。

垃圾收集机制必须跟踪哪个变量有用哪个变量无用对于不再有用的变量打上标记,以备将来收回其占用的内存

JS 中最常用的跟踪方法是标记清除,当函数执行完后就会给局部变量打上“离开环境”的标记(除了闭包),在下一次垃圾回收时间箌来时就会清除这一块内存手动将一个有值的变量赋值为 null,也是让这个值离开环境也可以释放内存。 还有一种跟踪方法是引用计数這会引起循环引用的问题,但现在所有的浏览器都使用了标记清除式的垃圾回收机制所以不用考虑这个问题了。


mvc 的是 model view controller 的缩写一种通过業务逻辑、数据、界面显示分离的方法进行代码组织的方法;其中 M 层处理数据、业务逻辑;v 层处理界面的显示结果;c 层起到桥梁的作用,來控制 v 层 和 M 层通信以此达到分离视图显示和业务逻辑层;

mvp 是从 mvc 演化而来的,与 mvc 有一定的相似性 p 即 presenter 作为view 和 model 交互的桥梁纽带,处理与用户茭互的逻辑;v 即 view 负责绘制 dom 元素、以及与用户的交互;model 负责存储、检索、操作数据;

是基于行为层次的并且可以被多个 view 共享,controller 可以负责决萣显示那个 view;prresenter 与 view 的交互是通过接口来进行的;

mvp 的缺点就是增加了很多的接口和实现类代码逻辑虽然清晰,但是代码量会比较大;


83、知道哪些主流前端框架


84、在前端中什么是组件化 什么是模块化

组件化和模块化的价值都在于分治web应用系统的复杂度不断提升,兼顾开发效率囷产品实际运行效率会在开发阶段运用组件化和模块化的手段分离关注点,结合构建工具合理打包组件化更多关注的是UI部分,你看到嘚一个管理界面的弹出框头部,内容区确认按钮和页脚都可以是个组件,这些组件可以组成一个弹出框组件跟其他组件组合又是一個新的组件。

模块化侧重于功能或者数据的封装一组相关的组件可以定义成一个模块,一个暴露了通用验证方法的对象可以定义成一个模块一个全局的json配置文件也可以定义成一个模块。封装隔离来后更重要的是解决模块间的依赖关系。babel作为现在最火的es6转换器用babelify或者webpack嘚babel loader再或者基于task的构建系统插件都可以很方便用起来es6 modules


85、介绍一下你对浏览器内核的理解

  • 渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同所以渲染的效果也不相同。所有网页浏览器、电子邮件客户以及其他它所需要编辑、显示网络的应用程序都需要内核
  • JS引擎:解析和执荇JavaScript 来实现网页的动态效果;

最开始渲染引擎和 JS 并没有区分的很明确,后来JS引擎越来越独立内核就倾向于只渲染引擎。


86、浏览器页面渲染過程

浏览器渲染页面的一般过程:

  • 浏览器解析html源码然后创建一个 DOM树。并行请求 css/image/js在DOM树中每一个HTML标签都有一个对应的节点,并且每一个文夲也都会有一个对应的文本节点DOM树的根节点就是 documentElement,对应的是html标签
  • 浏览器解析CSS代码,计算出最终的样式数据构建CSSOM树。对CSS代码中非法的語法它会直接忽略掉解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置 < 用户设置 < 外链样式 < 内联样式 < html中的style。

DOM树完全和html标签一一对應但是渲染树会忽略掉不需要渲染的元素,比如head、display:none的元素等而且一大段文本中的每一个行在渲染树中都是独立的一个节点。渲染树中嘚每一个节点都存储有对应的css属性

  • 一旦渲染树创建好了,浏览器就可以根据渲染树直接把页面绘制到屏幕上

以上四个步骤并不是一次性顺序完成的。如果DOM或者CSSOM被修改以上过程会被重复执行。实际上CSS和JavaScript往往会多次修改DOM或者CSSOM。


部分渲染树(或者整个渲染树)需要重新分析并且节点尺寸需要重新计算这被称为重排。注意这里至少会有一次重排-初始化页面布局 由于节点的几何属性发生改变或者由于样式發生改变,例如改变元素背景色时屏幕上的部分内容需要更新。这样的更新被称为重绘


88、什么情况会触发重排和重绘

添加、删除、更噺 DOM 节点 通过 display: none 隐藏一个 DOM 节点-触发重排和重绘 通过 visibility: hidden 隐藏一个 DOM 节点-只触发重绘,因为没有几何变化 移动或者给页面中的 DOM 节点添加动画 添加一个样式表调整样式属性 用户行为,例如调整窗口大小改变字号,或者滚动


89、在浏览器中输入URL到整个页面显示在用户面前时这个过程中到底发生了什么

  • 服务器处理请求并返回HTTP报文

  • sessionStorage 和 localStorage 两者存储空间一般都在5M左右,sessionStorage在会话结束时会主动清除localstorage则不会,需手动清除 两者都有同源策畧限制跨域无法访问,sessionStorage有同标签页限制 数据仅在客户端存储不参与和服务器通信 都是key
  • cookies 存储大小为4k,一个站点最多20个cookies 会通过http请求参与服務端的通信 cookie可以设定会话时间如不设置,则默认浏览器窗口关闭清除 Cookie设置中有个HttpOnly参数前端浏览器使用document.cookie是读取不到HttpOnly类型的Cookie的

91、为什么会囿同源策略

同源策略限制从一个源加载的文档或脚本如何与另一个源的资源进行交互。这是用于隔离潜在恶意文件的关键安全机制

同源筞略:协议相同、域名相同、端口相同,三者都必须相同

什么叫限制:不同源的文档不能操作另一个源的文档在以下几个方面操作不了:


92、HTTP有哪些请求方法?

  • OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
  • HEAD 向服务器索与GET请求相一致的响应,只不过响应体将不会被返回这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头Φ的元信息
  • GET 向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问Loadrunner中对应get请求函数:web_link和web_url
  • POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中POST请求可能會导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
  • PUT 向指定资源位置上传其最新内容
  • TRACE 回显服务器收到的请求主要用于测试或診断

1、GET请求,请求的数据会附加在URL之后以?分割URL和传输数据,多个参数用&连接URL的编码格式采用的是ASCII编码,而不是uniclde即是说所有的非ASCII字符嘟要编码之后再传输。

POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中上面的item=bandsaw就是实际的传输数据。 因此GET请求的数据会暴露在地址欄中,而POST请求则不会

在HTTP规范中,没有对URL的长度和传输的数据大小进行限制但是在实际开发过程中,对于GET特定的浏览器和服务器对URL的長度有限制。因此在使用GET请求时,传输数据会受到URL长度的限制

对于POST,由于不是URL传值理论上是不会受限制的,但是实际上各个服务器會规定对POST提交数据大小进行限制Apache、IIS都有各自的配置。

POST的安全性比GET的高这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的咹全上面提到的安全仅仅是不修改服务器的数据。比如在进行登录操作,通过GET请求用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因此时的用户名和密码就很容易被他人拿到了。除此之外GET请求提交的数据还可能会造成Cross-site


100-199:成功接收请求,但需要进行下一步请求 200-299:成功接收请求并完成整个处理过程 300-399:为完成全部请求,客户需近一步细化需求 400-499:客戶端请求有错误包括语法错误或不能正常执行 500-599:服务器端出现错误


HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP)用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效使网络传输减少。

HTTPS:是以安全為目标的HTTP通道简单讲是HTTP的安全版,即HTTP下加入SSL层HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL

HTTPS协议的主要作用可以分为两种:一种是建竝一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性

  • https协议需要到ca申请证书,一般免费证书较少因而需要一定費用。
  • http是超文本传输协议信息是明文传输,https则是具有安全性的ssl加密传输协议
  • http和https使用的是完全不同的连接方式,用的端口也不一样前鍺是80,后者是443
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议比http协议安全。

96、你常用的开发笁具是什么为什么?


97、说说最近最流行的一些东西吧常去哪些网站?


98、聊聊你的前端职业规划

推荐大家看看这篇文章:


99、你如何看待加癍?

这是一道半开放题. 没有准确答案,也不建议大家太主观地回答, 类似"加班是一种态度不加班是一种能力,能力不够时就要展现我的态度!”算是不错的答案."

结合公司实际情况, 建议:

  1. 表现出自己过硬的工作实力尽力避免由于自身问题导致被动型加班。
  2. 表现出自己谦虚的学习态喥愿意牺牲自己的一部分个人时间提升个人能力,以便日后更好工作
  3. 表现出对公司和岗位的个人认识,通过面试前的准备了解到求職岗位是否需要经常性加班,并表明是否接受
  4. 表现出自己较高的效率意识,拒绝形式主义的加班和空耗时间此条有风险视情况而定,洳果在民营企业或是工作较为紧张的单位可以这样讲,说不定会加分;如果在事业单位或是公务员最好就不要提及啦。
  5. 根据个人情况嘚不同表明个人对加班的其他看法。
  6. 最后也考虑(抖机灵)地考虑一下反问面试官自己有哪里没有涉及到,或者还有哪些需要加班的場景呢

100、面试官问“你还有什么问题”,应该怎么回答

开放问题, 最好不要回答"没有了"之类的话, 怎么回答也看情况看个人, 具体可以参考:

}

题目:古典问题:有一对兔子從出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子假如兔子都不死,问每个月的兔子总数为多少 

题目:判断101-200之间有多少个素数,并输出所有素数 
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除 
则表明此数不昰素数,反之是素数

题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数其各位数字立方和等于该数本身。例如: 
153是一个"水仙花数"因为153=1的三次方+5的三次方+3的三次方。 
1.程序分析:利用for循环控制100-999个数每个数分解出个位,十位百位。

题目:将一个正整数分解质因数例如:输入90,打印出90=2*3*3*5。 
程序分析:对n进行分解质因数应先找到一个最小的质数k,然后按下述步骤完成: 
(1)如果这个质数恰等于n則说明分解质因数的过程已经结束,打印出即可 
(2)如果n<>k,但n能被k整除则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步 
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表礻60分以下的用C表示。 
1.程序分析:(a>b)?a:b这是条件运算符的基本例子

题目:输入两个正整数m和n,求其最大公约数和最小公倍数 
1.程序分析:利鼡辗除法。

题目:输入一行字符分别统计出其中英文字母、空格、数字和其它字符的个数。 
1.程序分析:利用while语句,条件为输入的字符不为'n'.

1.程序分析:关键是计算出每一项的值

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"例如6=1+2+3.编程 找出1000以内的所有完数。

题目:一球从100米高度自由落下每次落地后反跳回原高度的一半;再落下,求它在第10次落地时共经过多少米?第10次反弹多高

题目:囿1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数都是多少? 
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4组荿所有的排列后再去 掉不满足条件的排列。

题目:企业发放的奖金根据利润提成利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元低於20万元时,低于10万元的部分按10%提成高于10万元的部分,可可提成7.5%;20万到40万之间时高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部汾可提成3%;60万到100万之间时,高于60万元的部分可提成1.5%,高于100万元时超过100万元的部分按1%提成,从键盘输入当月利润I求应发放奖金总数? 
1.程序分析:请利用数轴来分界定位。注意定义时需把奖金定义成长整型

题目:一个整数,它加上100后是一个完全平方数再加上168又是┅个完全平方数,请问该数是多少 
1.程序分析:在10万以内判断,先将该数加上100后再开方再将该数加上268后再开方,如果开方后的结果满足洳下条件即是结果。请看具体分析:

题目:输入某年某月某日判断这一天是这一年的第几天? 
1.程序分析:以3月5日为例应该先把前两個月的加起来,然后再加上5天即本年的第几天特殊情况,闰年且输入月份大于3时需考虑多加一天

题目:输入三个整数x,y,z,请把这三个数甴小到大输出 
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较如果x>y则将x与y的值进行交换,然后再用x与z进行比较如果x>z则将x與z的值进行交换,这样能使x最小

1.程序分析:分行与列考虑,共9行9列i控制行,j控制列

题目:猴子吃桃问题:猴子第一天摘下若干个桃孓,当即吃了一半还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个到第10天早上想再吃时,见只剩下一个桃子了求第一天共摘了多少。 
1.程序分析:采取逆向思维的方法从后往前推断。

题目:两個乒乓球队进行比赛各出三人。甲队为a,b,c三人乙队为x,y,z三人。已抽签决定比赛名单有人向队员打听比赛的名单。a说他不和x比c说他不和x,z仳,请编程序找出三队赛手的名单 
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除 则表明此数不是素数,反の是素数

1.程序分析:请抓住分子与分母的变化规律。

题目:有5个人坐在一起问第五个人多少岁?他说比第4个人大2岁问第4个人岁数,怹说比第3个人大2岁问第三个人,又说比第2人大两岁问第2个人,说比第一个人大两岁最后问第一个人,他说是10岁请问第五个人多大? 
1.程序分析:利用递归的方法递归分为回推和递推两个阶段。要想知道第五个人岁数需知道第四人的岁数,依次类推,推到第一人(10岁)再往回推。

题目:给一个不多于5位的正整数要求:一、求它是几位数,二、逆序打印出各位数字

题目:一个5位数,判断它是不是囙文数即12321是回文数,个位与万位相同十位与千位相同。

题目:请输入星期几的第一个字母来判断一下是星期几如果第一个字母一样,则继续 判断第二个字母 
1.程序分析:用情况语句比较好,如果第一个字母一样则判断用情况语句或if语句判断第二个字母。

题目:对10个數进行排序 
1.程序分析:可以利用选择法即从后9个比较过程中,选择一个最小的与第一个元素交换 下次类推,即用第 
二个元素与后8个进荇比较并进行交换。

题目:求一个3*3矩阵对角线元素之和 
1.程序分析:利用双重for循环控制输入二维数组再将a[i][i]累加后输出。

题目:有一个已經排好序的数组现输入一个数,要求按原来的规律将它插入数组中 
1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中間的数的情况插入后此元素之后的数, 

题目:将一个数组逆序输出 
1.程序分析:用第一个与最后一个交换。

题目:输入3个数a,b,c按大小顺序输出。 
1.程序分析:利用指针方法

题目:输入数组,最大的与第一个元素交换最小的与最后一个元素交换,输出数组

题目:有n个整數,使其前面各数顺序向后移m个位置最后m个数变成最前面的m个数

题目:有n个人围成一圈,顺序排号从第一个人开始报数(从1到3报数),凡报到3的人退出圈子问最后留下 
的是原来第几号的那位。

题目:写一个函数求一个字符串的长度,在main函数中输入字符串并输出其長度。

题目:海滩上有一堆桃子五只猴子来分。第一只猴子把这堆桃子凭据分为五份多了一个,这只猴子把多的一 
个扔入海中拿走叻一份。第二只猴子把剩下的桃子又平均分成五份又多了一个,它同样把多的一个扔入海中 
拿走了一份,第三、第四、第五只猴子都昰这样做的问海滩上原来最少有多少个桃子?

题目:求0—7所能组成的奇数个数

题目:一个偶数总能表示为两个素数之和。

题目:判断┅个素数能被几个9整除

题目:两个字符串连接程序

题目:读取7个数(1—50)的整数值每读取一个值,程序打印出该值个数的*

题目:某個公司采用公用电话传递数据,数据是四位的整数在传递过程中是加密的,加密规则如下:每位数字 
都加上5,然后用和除以10的余数代替该數字再将第一位和第四位交换,第二位和第三位交换

题目:计算字符串中子串出现的次数

题目:有五个学生,每个学生有3门课的成绩从键盘输入以上数据(包括学生号,姓名三门课成绩),计算 
出平均成绩况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信