精华内容
下载资源
问答
  • J2EE Web考试试题及答案

    千次阅读 2021-02-26 12:26:23
    J2EE Web考试试题及答案1、JSP技术是一种在WEB应用中开发动态交互性网页的技术,请阐述一下JSP技术的优缺点?JSP技术具备了Java技术的简单易用、完全面向对象、具有平台无关性且安全可靠、主要面向Internet的所有特点...

    J2EE Web考试试题及答案

    1、JSP技术是一种在WEB应用中开发动态交互性网页的技术,请阐述一下JSP技术的优缺点?

    117985d561b661acf2642524b27634be.png

    JSP技术具备了Java技术的简单易用、完全面向对象、具有平台无关性且安全可靠、主要面向Internet的所有特点。

    JSP的技术优势:

    (1)一次编写、到处运行。

    (2)系统的多平台支持。

    (3)强大的可伸缩性。

    (4)多样化和功能强大的开发工具支持。

    JSP的技术弱势:

    (1)正式由于为了跨平台的功能,为了极度的伸缩能力,所以极大地增加了产品的复杂性。

    (2)Java的运行速度是用class对象常驻内存来完成的,所以需要计算机系统有足够的内存来保证程序的运行。

    2、请简述JSP的工作原理。

    当JSP页面第一次被Java服务器调用时,通过JSP引擎自动被编译成Servlet,然后被执行,以后每次调用时,执行编译过的Servlet。将执行的结果在客户端显示出来。

    3、在JSP的'动作元素中,标签允许包含两种文件:动态文件和静态文件,在服务器对这两种文件进行解析执行时,有什么异同点。

    标签允许包含动态文件和静态文件,但是这两种包含文件的结果是不同的。如果文件仅仅是静态文件,那么这种包含仅仅是把包含文件的内容加到JSP文件中去,这种被包含文件不会被JSP编译器执行。相反地,如果这个被包含文件是动态的文件,那么这个被包含文件将会被JSP编译器执行。

    4、在WEB页面中我们常有的页面重定向技术有那些?在Servlet中,我们如何实现页面转发?

    5、请写出使用JDBC技术连接SQL Server数据库时,建立连接对象(Connection)以及建立语句集对象(Statement)的JAVA代码。

    Connection connection;

    Statement statement;

    String sourceURL="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=你的数据库的名字 ";

    String UserName=你的数据库用户名;

    String Password=你的数据库的访问密码;

    public DatabaseConnection () {

    try {

    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

    connection = DriverManager.getConnection(sourceURL,UserName,Password);

    statement = connection.createStatement();

    } catch (SQLException sqle) {

    System.err.println("Error creating connection");

    } catch (ClassNotFoundException cnfe) {

    System.err.println(cnfe.toString());

    }

    }

    6、请比较并简述利用JSP+JavaBean模式进行开发和利用JSP+Servlet+JavaBean模式进行开发有什么异同?有什么优缺点?

    (1)使用JSP+JavaBean模式开发项目时,JSP页面独自响应请求并经处理后把结果返回给客户端;JavaBean负责处理业务逻辑。这种模式简单,快速,高效。但是会在JSP页面中嵌入大量的Java代码,当要处理的业务逻辑复杂时,页面会变的非常复杂。而且难于维护。

    (2)使用JSP+Servlet+JavaBean模式开发项目时,系统的结构非常清晰,而且符合MVC的开发模型。JSP负责控制客户端的信息显示;JavaBean负责处理具体的业务逻辑;Servlet充当控制器的角色,控制程序逻辑的转发。这样便于系统的开发和后期的维护。

    缺点是Servlet的编写难度比JSP复杂,而且配置也比较复杂。

    7、JavaBean的特性有哪些?

    (1)可以实现代码的重复利用;

    (2)易维护性、易使用性、易编写性;

    (3)可以在支持Java的任何平台上工作,而不需要重新编译;

    (4)可以在内部、网内或者是网络间进行传输;

    (5)可以以其他部件的模式进行工作。

    8、请简述JavaBean和EJB的区别?

    JavaBean组件和企业级EJB组件的概念是完全不同的。EJB是J2EE的核心技术,它为开发服务器端应用程序组件提供了一个模型,利用这个模型来创建可移植与分布式企业应用程序服务器或组件。EJB是一个用来创建分布式、服务器端以及基于Java的企业应用程序组件的功能强大的组件模型。

    9、请简述Servlet的生命周期

    Servlet的生命周期分为以下几个阶段:

    (1)装载Servlet

    (2)创建一个Servlet实例

    (3)调用Servlet的init()方法

    (4)服务

    (5)销毁

    在上述的几个阶段中,对外服务是最重要的阶段,service()方法是我们最关心的方法。因为它是处理业务的方法。

    10、在使用Servlet时,doPost方法和doGet方法有什么区别?

    (1)doGet

    GET调用用于获取服务器信息,并将其作为响应返回给客户端。当经由WEB浏览器,或者通过HTML、JSP直接访问Servlet的URL时,一般使用Get调用。

    GET调用在URL里显示正传送给Servlet的数据,这在系统的安全方面会带来一些问题。 使用doGet调用,在客户端的Form表单中必须指定调用的类型为Get。

    (2)doPost

    它用于它客户端的数据发送到服务器端。使用它的好处是可以隐藏发送给服务器端的任何数据。Post适合发送大量的数据。

    11、在JSP中共享数据,大体上可以分为两种方式,一种是在同一个用户的不同页面之间共享数据,另一种是在不同的用户之间共享数据。请回答上面两种方式分别通过什么方法可以实现?

    对于同一个用户的会话,要想在不同的页面之间共享数据,可以有以下几种选择:

    (1)把数据保存在Session中

    (2)通过Cookie;

    (3)通过隐含的表单把数据提交到下一个页面

    (4)通过ServletContext对象;

    (5)通过Application对象

    (6)通过文件系统或者数据库

    对于不同用户之间共享数据,通常的方法是:

    (1)通过ServletContext对象

    (2)通过Application对象

    (3)通过文件系统或者数据库

    【J2EE Web考试试题及答案】相关文章:

    展开全文
  • 可用于准备web的期末考试
  • 本篇文章对于学习Web安全的朋友来说应该是目前最全面的面试合集了,后续也会陆续更新其他大厂的面试题目和知识点。另外我还整理了许多关于Web安全的学习资料+工具包等等,需要的点击Web安全学习 一、渗透测试...

    人人都有一个进大厂的梦想,而进大厂的门槛也可想而知,所以这里整理了一份安全大厂的面试大全,看完文章如果对你有帮助的话希望能够点赞+收藏+关注!感谢!

    本篇文章对于学习Web安全的朋友来说应该是目前最全面的面试题合集了,后续也会陆续更新其他大厂的面试题目和知识点。另外我还整理了许多关于Web安全的学习资料+工具包等等,需要的点击Web安全学习

    一、渗透测试面试题,包含大量渗透技巧

    1.拿到一个待检测的站,你觉得应该先做什么?

    a、信息收集
    1、获取域名的whois信息,获取注册者邮箱姓名电话等,丢社工库里看看有没有泄露密码,然后尝试用泄露的密码进行登录后台。用邮箱做关键词进行丢进搜索引擎。利用搜索到的关联信息找出其他邮箱进而得到常用社交账号。社工找出社交账号,里面或许会找出管理员设置密码的习惯  。利用已有信息生成专用字典。
    2、查询服务器旁站以及子域名站点,因为主站一般比较难,所以先看看旁站有没有通用性的cms或者其他漏洞。
    3、查看服务器操作系统版本,web中间件,看看是否存在已知的漏洞,比如IIS,APACHE,NGINX的解析漏洞
    4、查看IP,进行IP地址端口扫描,对响应的端口进行漏洞探测,比如 rsync,心脏出血,mysql,ftp,ssh弱口令等。
    5、扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄漏,比如php探针
    6、google hack 进一步探测网站的信息,后台,敏感文件

    b、漏洞扫描
    开始检测漏洞,如XSS,XSRF,sql注入,代码执行,命令执行,越权访问,目录读取,任意文件读取,下载,文件包含,远程命令执行,弱口令,上传,编辑器漏洞,暴力破解等

    c、漏洞利用
    利用以上的方式拿到webshell,或者其他权限

    d、权限提升
    提权服务器,比如windows下mysql的udf提权,serv-u提权,windows低版本的漏洞,如iis6,pr,巴西烤肉,linux脏牛漏洞,linux内核版本漏洞提权,linux下的mysql system提权以及oracle低权限提权

    e、日志清理

    f、总结报告及修复方案

    2.判断出网站的CMS对渗透有什么意义?

    查找网上已曝光的程序漏洞。

    如果开源,还能下载相对应的源码进行代码审计。

    3.一个成熟并且相对安全的CMS,渗透时扫目录的意义?

    敏感文件、二级目录扫描

    站长的误操作比如:网站备份的压缩文件、说明.txt、二级目录可能存放着其他站点

    4.常见的网站服务器容器。

    IIS、Apache、nginx、Lighttpd、Tomcat

    5.mysql注入点,用工具对目标站直接写入一句话,需要哪些条件?

    root权限以及网站的绝对路径。

    6.目前已知哪些版本的容器有解析漏洞,具体举例。

    a、IIS 6.0
    /xx.asp/xx.jpg "xx.asp"是文件夹名

    b、IIS 7.0/7.5
    默认Fast-CGI开启,直接在url中图片地址后面输入/1.php,会把正常图片当成php解析

    c、Nginx
    版本小于等于0.8.37,利用方法和IIS 7.0/7.5一样,Fast-CGI关闭情况下也可利用。空字节代码 xxx.jpg.php

    d、Apache 上传的文件命名为:test.php.x1.x2.x3,Apache是从右往左判断后缀

    e、lighttpd xx.jpg/xx.php,不全,请小伙伴们在评论处不吝补充,谢谢!

    7.如何手工快速判断目标站是windows还是linux服务器?

    linux大小写敏感,windows大小写不敏感。

    8.为何一个mysql数据库的站,只有一个80端口开放?

    更改了端口,没有扫描出来。

    站库分离。

    3306端口不对外开放

    9、3389无法连接的几种情况

    没开放3389 端口
    端口被修改
    防护拦截
    处于内网(需进行端口转发)

    10.如何突破注入时字符被转义?

    宽字符注入
    hex编码绕过

    11.在某后台新闻编辑界面看到编辑器,应该先做什么?

    查看编辑器的名称版本,然后搜索公开的漏洞。

    12.拿到一个webshell发现网站根目录下有.htaccess文件,我们能做什么?

    能做的事情很多,用隐藏网马来举例子:
    插入<FilesMatch "xxx.jpg"> SetHandler application/x-httpd-php
    .jpg文件会被解析成.php文件。

    具体其他的事情,不好详说,建议大家自己去搜索语句来玩玩。

    13.注入漏洞只能查账号密码?

    只要权限广,拖库脱到老。

    14.安全狗会追踪变量,从而发现出是一句话木马吗?

    是根据特征码,所以很好绕过了,只要思路宽,绕狗绕到欢,但这应该不会是一成不变的。

    15.access 扫出后缀为asp的数据库文件,访问乱码,**如何实现到本地利用?

    迅雷下载,直接改后缀为.mdb。

    16.提权时选择可读写目录,为何尽量不用带空格的目录?

    因为exp执行多半需要空格界定参数

    17.某服务器有站点A,B 为何在A的后台添加test用户,访问B的后台。发现也添加上了test用户?

    同数据库。

    18.注入时可以不使用and 或or 或xor,直接order by 开始注入吗?

    and/or/xor,前面的1=1、1=2步骤只是为了判断是否为注入点,如果已经确定是注入点那就可以省那步骤去。

    19:某个防注入系统,在注入时会提示:

    系统检测到你有非法注入的行为。
    已记录您的ip xx.xx.xx.xx
    时间:2016:01-23
    提交页面:test.asp?id=15
    提交内容:and 1=1

    20、如何利用这个防注入系统拿shell?

    在URL里面直接提交一句话,这样网站就把你的一句话也记录进数据库文件了 这个时候可以尝试寻找网站的配置文件 直接上菜刀链接。

    21.上传大马后访问乱码时,有哪些解决办法?

    浏览器中改编码。

    22.审查上传点的元素有什么意义?

    有些站点的上传文件类型的限制是在前端实现的,这时只要增加上传类型就能突破限制了。

    23.目标站禁止注册用户,找回密码处随便输入用户名提示:“此用户不存在”,你觉得这里怎样利用?

    先爆破用户名,再利用被爆破出来的用户名爆破密码。
    其实有些站点,在登陆处也会这样提示
    所有和数据库有交互的地方都有可能有注入。

    24.目标站发现某txt的下载地址为http://www.test.com/down/down.php?file=/upwdown/1.txt,你有什么思路?

    这就是传说中的下载漏洞!在file=后面尝试输入index.php下载他的首页文件,然后在首页文件里继续查找其他网站的配置文件,可以找出网站的数据库密码和数据库的地址。

    25.甲给你一个目标站,并且告诉你根目录下存在/abc/目录,并且此目录下存在编辑器和admin目录。请问你的想法是?

    直接在网站二级目录/abc/下扫描敏感文件及目录。

    26.在有shell的情况下,如何使用xss实现对目标站的长久控制?

    后台登录处加一段记录登录账号密码的js,并且判断是否登录成功,如果登录成功,就把账号密码记录到一个生僻的路径的文件中或者直接发到自己的网站文件中。(此方法适合有价值并且需要深入控制权限的网络)。

    在登录后才可以访问的文件中插入XSS脚本。

    27.后台修改管理员密码处,原密码显示为*。你觉得该怎样实现读出这个用户的密码?

    审查元素 把密码处的password属性改成text就明文显示了

    28.目标站无防护,上传图片可以正常访问,上传脚本格式访问则403.什么原因?

    原因很多,有可能web服务器配置把上传目录写死了不执行相应脚本,尝试改后缀名绕过

    29.审查元素得知网站所使用的防护软件,你觉得怎样做到的?

    在敏感操作被拦截,通过界面信息无法具体判断是什么防护的时候,F12看HTML体部 比如护卫神就可以在名称那看到内容。

    30.在win2003服务器中建立一个 .zhongzi文件夹用意何为?

    隐藏文件夹,为了不让管理员发现你传上去的工具。

    31、sql注入有以下两个测试选项,选一个并且阐述不选另一个的理由:

    A. demo.jsp?id=2+1
    B. demo.jsp?id=2-1
    选B,在 URL 编码中 + 代表空格,可能会造成混淆

    32、以下链接存在 sql 注入漏洞,对于这个变形注入,你有什么思路?

    demo.do?DATA=AjAxNg==
    DATA有可能经过了 base64 编码再传入服务器,所以我们也要对参数进行 base64 编码才能正确完成测试

    33、发现 demo.jsp?uid=110 注入点,你有哪几种思路获取 webshell,哪种是优选?

    有写入权限的,构造联合查询语句使用using INTO OUTFILE,可以将查询的输出重定向到系统的文件中,这样去写入 WebShell 使用 sqlmap –os-shell 原理和上面一种相同,来直接获得一个 Shell,这样效率更高 通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包上传等方法上传 Shell

    34、CSRF 和 XSS 和 XXE 有什么区别,以及修复方式?

    XSS是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用HTTP Only来禁止JavaScript读取Cookie值、输入时校验、浏览器与Web应用端采用相同的字符编码。

    CSRF是跨站请求伪造攻击,XSS是实现CSRF的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。修复方式:筛选出需要防范CSRF的页面然后嵌入Token、再次输入密码、检验Referer XXE是XML外部实体注入攻击,XML中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。修复方式:XML解析库在调用时严格禁止对外部实体的解析。

    35、CSRF、SSRF和重放攻击有什么区别?

    CSRF是跨站请求伪造攻击,由客户端发起 SSRF是服务器端请求伪造,由服务器发起 重放攻击是将截获的数据包进行重放,达到身份认证等目的

    36、说出至少三种业务逻辑漏洞,以及修复方式?

    密码找回漏洞中存在

    1)密码允许暴力破解、

    2)存在通用型找回凭证、

    3)可以跳过验证步骤、

    4)找回凭证可以拦包获取

    等方式来通过厂商提供的密码找回功能来得到密码。

    身份认证漏洞中最常见的是

    1)会话固定攻击

    2) Cookie 仿冒

    只要得到 Session 或 Cookie 即可伪造用户身份。

    验证码漏洞中存在

    1)验证码允许暴力破解

    2)验证码可以通过 Javascript 或者改包的方法来进行绕过

    37、圈出下面会话中可能存在问题的项,并标注可能会存在的问题?

    有写入权限的,构造联合查询语句使用using INTO OUTFILE,可以将查询的输出重定向到系统的文件中,这样去写入 WebShell 使用 sqlmap –os-shell 原理和上面一种相同,来直接获得一个 Shell,这样效率更高 通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包上传等方法上传 Shell

    38、给你一个网站你是如何来渗透测试的?在获取书面授权的前提下。

    39、sqlmap,怎么对一个注入点注入?
    1)如果是get型号,直接,sqlmap -u "诸如点网址".
    2) 如果是post型诸如点,可以sqlmap -u "注入点网址” --data="post的参数"
    3)如果是cookie,X-Forwarded-For等,可以访问的时候,用burpsuite抓包,注入处用号替换,放到文件里,然后sqlmap -r "文件地址"

    40、nmap,扫描的几种方式

    41、sql注入的几种类型?
    1)报错注入
    2)bool型注入
    3)延时注入
    4)宽字节注入
    42、报错注入的函数有哪些?10个

    1)and extractvalue(1, concat(0x7e,(select @@version),0x7e))】】】
    2)通过floor报错 向下取整
    3)+and updatexml(1, concat(0x7e,(secect @@version),0x7e),1)
    4).geometrycollection()select from test where id=1 and geometrycollection((select from(selectfrom(select user())a)b));
    5).multipoint()select from test where id=1 and multipoint((select from(select from(select user())a)b));
    6).polygon()select from test where id=1 and polygon((select from(select from(select user())a)b));
    7).multipolygon()select from test where id=1 and multipolygon((select from(select from(select user())a)b));
    8).linestring()select from test where id=1 and linestring((select from(select from(select user())a)b));
    9).multilinestring()select from test where id=1 and multilinestring((select from(select from(select user())a)b));
    10).exp()select from test where id=1 and exp(~(select * from(select user())a));

    43、延时注入如何来判断?

    if(ascii(substr(“hello”, 1, 1))=104, sleep(5), 1)

    44、盲注和延时注入的共同点?

    都是一个字符一个字符的判断

    45、如何拿一个网站的webshell?

    上传,后台编辑模板,sql注入写文件,命令执行,代码执行, 一些已经爆出的cms漏洞,比如dedecms后台可以直接建立脚本文件,wordpress上传插件包含脚本文件zip压缩包等

    46、sql注入写文件都有哪些函数?

    select '一句话' into outfile '路径'
    select '一句话' into dumpfile '路径'
    select '<?php eval($_POST[1]) ?>' 
    into dumpfile  'd:\wwwroot\baidu.com\nvhack.php';

    47、如何防止CSRF?
    1,验证referer
    2,验证token
    详细:http://cnodejs.org/topic/5533dd6e9138f09b629674fd

    48、owasp 漏洞都有哪些?(2021版)

    • 访问控制失效
    • 加密失败
    • 注入
    • 不安全设计
    • 安全配置错误
    • 脆弱过时组件
    • 识别与认证失败
    • 软件和数据完整性故障
    • 安全日志与监测失败

    49、SQL注入防护方法?
    1、使用安全的API
    2、对输入的特殊字符进行Escape转义处理
    3、使用白名单来规范化输入验证方法
    4、对客户端输入进行控制,不允许输入SQL注入相关的特殊字符
    5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除。

    50、代码执行,文件读取,命令执行的函数都有哪些?

    1)代码执行:

    eval,preg_replace+/e,assert,call_user_func,call_user_func_array,create_function

    2)文件读取:

    file_get_contents(),highlight_file(),fopen(),read 
    file(),fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()等

    3)命令执行:

    system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open()

    51、img标签除了onerror属性外,还有其他获取管理员路径的办法吗?
    src指定一个远程的脚本文件,获取referer

    52、img标签除了onerror属性外,并且src属性的后缀名,必须以.jpg结尾,怎么获取管理员路径。

    1)远程服务器修改apache配置文件,配置.jpg文件以php方式来解析 AddType application/x-httpd-php .jpg <img src=http://xss.tv/1.jpg> 会以php方式来解析

    53、为什么aspx木马权限比asp大?

    aspx使用的是.net技术。IIS 中默认不支持,ASP只是脚本语言而已。入侵的时候asp的木马一般是guest权限…APSX的木马一般是users权限。

    54、如何绕过waf?

    大小写转换法                                     
    干扰字符 /*!*/                                             
    编码 base64 unicode hex url ascll                                     
    复参数

    55、如何向服务器写入webshell?

    各种上传漏洞
    mysql具有写入权限,用sql语句写入shell
    http put方法

    56、渗透测试中常见的端口

    a、web类(web漏洞/敏感目录) 第三方通用组件漏洞struts thinkphp jboss ganglia zabbix

    80 web 
    80-89 web 
    8000-9090 web

    b、数据库类(扫描弱口令)

    1433 MSSQL 
    1521 Oracle 
    3306 MySQL 
    5432 PostgreSQL

    c、特殊服务类(未授权/命令执行类/漏洞)

    443 SSL心脏滴血 
    873 Rsync未授权 
    5984 CouchDB http://xxx:
    5984/_utils/ 
    6379 redis未授权 
    7001,7002 WebLogic默认弱口令,反序列 
    9200,9300 elasticsearch 参考WooYun: 多玩某服务器ElasticSearch命令执行漏洞 
    11211 memcache未授权访问 
    27017,27018 Mongodb未授权访问 
    50000 SAP命令执行 
    50070,50030 hadoop默认端口未授权访问

    d、常用端口类(扫描弱口令/端口爆破)

    21 ftp 
    22 SSH 
    23 Telnet 
    2601,2604 zebra路由,默认密码zebra
    3389 远程桌面

    ALL、端口合计详情

    3306 MySQL 
    3312/3311 kangle主机管理系统登陆 
    3389 远程桌面 
    4440 rundeck 参考WooYun: 借用新浪某服务成功漫游新浪内网 
    5432 PostgreSQL 
    5900 vnc 
    5984 CouchDB http://xxx:
    5984/_utils/ 
    6082 varnish 参考WooYun: Varnish HTTP accelerator CLI 未授权访问易导致网站被直接篡改或者作为代理进入内网 
    6379 redis未授权 
    7001,7002 WebLogic默认弱口令,反序列 
    7778 Kloxo主机控制面板登录 
    8000-9090 都是一些常见的web端口,有些运维喜欢把管理后台开在这些非80的端口上 
    8080 tomcat/WDCP主机管理系统,默认弱口令 
    8080,8089,9090 JBOSS 
    8083 Vestacp主机管理系统 (国外用较多)
    8649 ganglia 
    8888 amh/LuManager 主机管理系统默认端口 
    9200,9300 elasticsearch 参考WooYun: 多玩某服务器ElasticSearch命令执行漏洞 
    10000 Virtualmin/Webmin 服务器虚拟主机管理系统 
    11211 memcache未授权访问 
    27017,27018 Mongodb未授权访问 
    28017 mongodb统计页面 
    50000 SAP命令执行 
    50070,50030 hadoop默认端口未授权访问

    二、各大厂面试题

    1.深信服面试题

    难度系数:中

    1. 一面: 时间太久了,记不太清了,难度相对还是可以的
    2. 二面:
    3. ~sql注入的原理是什么
    4. -- 本质:将用户输入的不可信数据当作代码去执行
    5. -- 条件:用户能控制输入;;;原本程序要执行的代码,拼接了用户输入的内容,然后执行
    6. ~说说Linux的信号机制?
    7. ~Java还记得多少
    8. ~python用过哪些库,写过什么项目
    9. //还有一些,时间有点久远,记不太清了。
    10. //说实话,hr貌似水平不是太厉害,而且不仅仅问的web安全知识
    11. //总之大家要放轻松,自信面就行。有几个地方没回答上,以为没过,后来三面打电话过来才知道通过了。
    12. hr面:
    13. ~自我介绍
    14. -- 讲述自己学习安全的经历
    15. ~为什么投深信服
    16. -- 自己对网安感兴趣、XXX公司是个大企业;;有很多学长也在XXX工作;;老师在课堂提到过XXX公司不错
    17. ~职业规划未来三年、五年
    18. ~最有成就的一件事
    19. ~还有什么想问的
    20. ~对简历信息进行有针对的提问
    21. ~想在哪工作
    22. //微信视频面试的

    综合来说深信服的面试难度还是可以的,但是时间有点久远,记不太多了

    2.启明星辰面试题

    难度系数:中

    1. 二面:
    2. ~自我介绍-->对安全的学习
    3. ~sql注入用过哪些函数
    4. -- limit()、concat()、group_concat()、Substr()、Ascii()、Left()
    5. -- length()、updataxml()等等吧
    6. ~你的ATP攻击步骤
    7. ~sql注入的原理是什么,怎么防范
    8. -- 原理:本质、条件,可以多提一些都有哪些种类(如,显错有哪几种,盲注有哪几种,特别的几种(宽字节、反弹、偏移、DNS、二阶等))
    9. -- 防范:第一是正则过滤(安全狗、D盾等等)、第二是数据库预处理等
    10. ~挖掘src的主要是什么漏洞
    11. ~参加过哪些ctf比赛
    12. ~有没有自己写过工具
    13. ~还有没有想问的
    14. ~对哪些方面比较熟悉
    15. ~有没有过app测试的经历
    16. //这也是二面,一面记得也不是太清楚了 反正不是多难
    17. 最后一面
    18. ~没啥技术面,主要问问期待什么薪资
    19. ~什么时候可以上岗

     3.奇安信面试题

    难度系数:高

    1. 一面:
    2. ~没有自我介绍
    3. ~只要是简历上的基本上都会问
    4. ~MVC框架详细说一下
    5. -- http://www.ruanyifeng.com/blog/2007/11/mvc.html
    6. ~详细介绍一下sql注入
    7. -- 原理、条件、分类等等
    8. ~xss与csrf的区别
    9. -- 一个是盗取cookie、一个是利用cookie
    10. ~csrf的原理以及如何防范-->这往深入问了
    11. -- 访问A站的同时访问了B站(恶意站点)、
    12. -- B站脚本让浏览器带着B站准备好的语句去提交A站服务器
    13. -- A站没有csrf防护-->被攻击
    14. ~还有什么你擅长的但是没有问道的吗 -->xxe
    15. ~讲一下xxe的原理
    16. -- 本质:简单的说,就是XML外部实体注入攻击
    17. -- 原理:DTD部分去读取敏感的信息、将读取到的信息赋值到实体当中、XML部分使用的过程中,将实体内容输出
    18. -- 危害:读取任意文件、执行系统命令、探测内网端口、攻击内网网站等
    19. ~xxe会用到哪些函数
    20. -- simplexml_load_string
    21. ~文件上传,详细说说,
    22. -- 客户端检测:客户端校验、如何判断是前端检测、突破方法、黑白名单机制
    23. -- 服务端检测:服务端检测几个常见的手段、制作图片马(隐写)
    24. ~常见的web容器有哪些
    25. --apache、tomcat、IIS、Nginx等
    26. ~apache 7.0文件上传黑名单怎么绕过,详细说说
    27. -- 改后缀(php. php_ php4 phptml php空格等)
    28. -- htaccess文件绕过、win文件流绕过(隐写)
    29. ~密码学的对称密码与非对称密码有哪些
    30. -- 对称:DES、3DES、AES等
    31. -- 非对称:md5、base64等
    32. ~md5是不是对称加密
    33. -- 不是
    34. ~apache可以执行php文件吗
    35. -- 可以
    36. ~学过哪些数据库,(了解哪些数据库)
    37. -- mysql、Oracle、sql servers、access
    38. ~说说反序列化的原理
    39. -- 序列化:将php中对象、类、数组、变量、匿名函数等,转化为字符串 方便保存到数据库或者文件中(将状态信息保存为字符串)
    40. -- 反序列化: 将字符串保存为状态信息
    41. ~反序列化会用到哪些函数
    42. -- php的unserialize()函数
    43. -- 反序列化貌似hr更想问java的
    44. -- 更多请百度:WebLogic 反序列化,将这个理解透彻和hr聊问题就不大了
    45. ~xxe有没有实战过
    46. ~java的多线程
    47. ~python有过哪些项目,写过什么东西
    48. ~之前python学到什么地方

    4.京东面试题 

    难度系数:中

    1. 一面: (安全研发部门面试)
    2. ~首先根据简历提问
    3. ~问我的一个项目完成的怎么的样了,//简历中的
    4. ~Java基础怎么样,
    5. ~有没有自己动手写过一些工具
    6. ~有没有想过自己以后要写一下扫描器
    7. ~sql注入的简单原理及其如何防御
    8. ~有没有了解过反序列化 尤其是Java方向的
    9. ~数据结构还记得多少
    10. ~src主要挖掘一些什么类型的漏洞
    11. ~了解的MSF框架怎么样
    12. ~数据库主要了解的哪些,主要学的什么数据库
    13. ~ssrf的原理及其防御 ---> 这有深入
    14. -- 定义:简单说,利用某站点发送请求攻击其他目标站点(借刀杀人)
    15. -- 聊聊主流防御 - 防外不防内
    16. -- 危害:内网渗透(读取敏感文件、探测端口-->6379端口的Redis可以说说)
    17. -- 防御:限制请求的端口、过滤返回的信息、黑名单内网ip等

    5.知道创宇面试题 

    难度系数:中

    1. 一面:
    2. 简单的自我介绍一下吧
    3. 了解sql注入吗
    4. 本质、 条件、分类、攻击步骤
    5. sql注入怎么防范呢
    6. 正则过滤、数据库预处理
    7. 数据库预处理怎么突破呢
    8. limit后是不可控的
    9. 知道httponly吗
    10. 主要是防止xss偷取cookie的
    11. sql注入如何getshell
    12. 回答写一句马。mysql有两个两个函数可以写文件 //dumpfile与into_outfile
    13. 额外提到6379端口靶场redis貌似就是直接写一句马,菜刀连接
    14. mysql写文件需要什么条件
    15. 用到into_outfile或者dumpfile函数
    16. 要有写的权限,知道绝对路径,能用单引号,要有file权限
    17. 了解内网渗透吗

    6.阿里面试题 

    难度系数:高

    1. 笔试:(无聊)
    2. 测试面试者综合水平,题目类似公务员(不是技术性得题目)
    3. 一面:(简单)
    4. 简单了解情况,技术面加hr面
    5. 比如自我介绍,大学几年最得意(骄傲)得事
    6. 你最擅长的领域,你得优缺点
    7. 技术问题就不说了,比较基础
    8. (需要注意的是,比起攻击,更在意的是如何修复、加固)
    9. 最后,还有什么要问我得吗
    10. 二面:(综合)
    11. 简历中的各类项目
    12. 什么级别?(国家级、省级等)
    13. 怎么样了,进度如何?
    14. 遇到哪些问题?怎么解决的?
    15. 用到哪些框架、什么语言、多少成员
    16. 如何分工,你负责什么?详细说说
    17. 以上每一个话题都会继续追问下去,直到你回答不上来
    18. 密码学
    19. 了解哪些加密算法,说说
    20. 对称加密与非对称加密的应用场景
    21. 还有一些,想不起来了
    22. 因为这一块我学的不是太好,就不多说了
    23. 以上每一个话题都会继续追问下去,直到你回答不上来
    24. ctf
    25. 负责哪些题型、在团队中的角色
    26. 拿过哪些奖项、参加过哪些赛事
    27. 说说遇到的一些(印象深的题目)
    28. 以上每一个话题都会继续追问下去,直到你回答不上来
    29. 除安全之外,还参加过哪些类型比赛?
    30. 比如:全国大学生建模比赛
    31. 人工智能国赛、大数据国赛等
    32. 以上每一个话题都会继续追问下去,直到你回答不上来
    33. 你的优点是什么?有什么你认为你能做,别人不能做的?
    34. 这里可以回答白盒审计,举例一些自己的cnvd证书(较高的加分项)
    35. 以上每一个话题都会继续追问下去,直到你回答不上来
    36. Java语言,
    37. 学的怎么样?拿过什么关于java编程算法的奖项?
    38. (面试我得hr是主攻java的)
    39. 以上每一个话题都会继续追问下去,直到你回答不上来
    40. 计算机网络
    41. 说说七层模型、
    42. 网络层动态连接的有几个协议、区别是什么(有什么异同)
    43. 以上每一个话题都会继续追问下去,直到你回答不上来
    44. web安全
    45. sql注入的防御方法,如何避免出现sql注入
    46. 反序列化相关问题(这又联系到了java)
    47. 你还会什么?多说说你觉得你会别人不会的?
    48. 你的技能里边最擅长什么?
    49. 以上每一个话题都会继续追问下去,直到你回答不上来
    50. 经历
    51. 有哪些较难忘的校园经历?
    52. 遇到哪些棘手问题?如何解决的?

    大概就这么多内容吧,其中web方向的内容并不太多,更多的是综合知识掌握。
    多说一点,阿里相对来说对学历看重一些,名牌985院校本身就是加分项;
    此外最好能拿到几本cnvd证书、月榜上几次
     

    附带:稍微总结一下面试的一些难点

    1.如何分辨base64

    1. 长度一定会被4整除
    2. 很多都以等号结尾(为了凑齐所以结尾用等号),当然也存在没有等号的base64
    3. 仅有 英文大小写、数字、+ /
    4. base64不算加密,仅仅是一门编码

    2.如何分辨MD5 //(特点)

    1. 一般是固定长度32位(也有16位) // 16 位实际上是从 32 位字符串中,取中间的第 9 位到第 24 位的部分
    2. 容易加密
    3. 细微偏差得到最终的值差距很大
    4.  md5加密是一种不可逆的加密算法 //不过貌似我国的王小云院士通过碰撞算法破解了
    5. 最后,md5经过计算得出128位2进制,正常的32位是二进制转换为16进制
    6. 在线网站一般是通过每日加密存储到数据库,与用户查询做对比

    3.栅栏密码 

    类似藏头诗,凯撒密码是栅栏密码的一种

    4.sqlmap如何爆出当前库 

    1. --current -db

    5.namp中区分大小写吗 

    1. 区分大小写!
    2. —O 操作系统检测 —A 操作系统与版本检测

    6.Oracle的默认端口 //相似的问题,mysql,sql server的端口 

    分别是1521 3306 1433

    7.mysql的管理员密码一般存放在哪 

    1. //连接登录mysql的 不是网站后台登录密码
    2. mysql库下的user表中--->一般是经过md5加密后的

    8.cdn的作用 

    1. 存数据,缓解主服务器压力
    2. 中转数据
    3. 一定程度上保护了主服务器 ---》 被Ddos后,打了一个假的服务器

    9.如何确认网站真实IP 

    1. 子域名,有可能是真实的IP
    2. 国外站点去ping
    3. 让服务器给自己发邮件----> 打开邮件-->右侧更多设置---->显示邮件原文---->直接看到

    10.sql注入,禁用substr()函数,用哪些函数替代

    1. mid()函数 <---mysql
    2. substring()函数 <---mysql,sql server
    3. left()函数 <---mysql

    11.如何防范sql注入 

    1. 正则匹配过滤 <---主流防护,比如,安全狗与D盾
    2. 使用数据库中的预处理
    3. 原理:先将查询语句固定
    4. 通过函数将传参变为字符串
    5. 拼接字符串去执行
    6. 你的关键字根本不会当作关键字去执行
    7. 根本思路: 避免数据变成代码被执行,时刻分清代码和数据的界限

    12.ssrf的危害 

    1. 重点是突进内网,内网渗透
    2. 读取敏感文件 --->file协议
    3. 探测端口 --->dict协议
    4. 进阶之6379端口的Redis (可以看作一个数据库) --> 默认无密码 ---> 写入一句马

    13.web容器的解析漏洞 

    1. 忘了收集了,大家先自行收集一下吧
    2. 有时间会补上的

    14.同源性法则 

    1. 解释一下,何为同源:协议、域名、端口都一样就是同源 //
    2.  http、https、
    3.  a.com、b.com
    4.  url:80、url:90

    如果文章对你有用的话,记得点赞+收藏+关注哦!

     戳此获取网络安全学习资源

    展开全文
  • WEB应用与开发,大学期末复习题库,含答案。 包含选择,填空,简答。 精心整理,求好评!
  • 近期总结一一些面试 都是企业的面试笔记 感觉薪资10k下的都会出笔试 特别高的薪资都是直接技术面试或者是 现场编程 总结很多人的面试,后期会对于单个知识点再说笔记详细讲解。 部分都是百度的答案,...

    近期总结一一些面试题 都是企业的面试题笔记题

    感觉薪资10k下的都会出笔试题   

    特别高的薪资都是直接技术面试或者是 现场编程 

    总结很多人的面试题,后期会对于单个知识点再说笔记详细讲解。

    最新Vue面试题网址:2021年 Vue经典面试题 -- 必问知识点 --(包含答案)_xm1037782843的博客-CSDN博客_vue面试题

    敬请关注公众 :包含全套 Vue 最新面试题  js最近面试题 等大量前端知识技术。

     

    部分都是百度的答案,不是特全面的,可以自己找下

    同时分享一个自己录制的CSS3动画特效经典案例【推荐教程】--后期会更新vue框架 微信小程序等内容。

    最近录制的ajax从基础到实战的视频,包含原生ajax  jquery的ajax 以及ajax接口获取数据等

    Ajax前端开发、项目实战、从零基础到精通、接口数据调用-学习视频教程-腾讯课堂

    红色为常见面试题

    =============================================================

    前端面试题: 

    1. 一个200*200的div在不同分辨率屏幕上下左右居中,用css实现

    <div style="width:500px;height:500px;border:1px solid green;display:flex;justify-content:center;align-items:center;">
      <div style="">
        上下左右居中
      </div>
    </div>

    2. 写一个左中右布局占满屏幕,其中左右两块是固定宽度200 ,中间自适应宽,要求先加载中间块,请写出结构及样式:

    <div id="left">我是左边</div>
        <div id="center">我是中间</div>
        <div id="right">我是右边</div>
    
    html,body{ margin: 0px;width: 100%; } 
    #left,#right{width: 200px;height: 200px;background-color: aqua;
        position: absolute;}
        #left{left: 0;top:0;}
        #right{right: 0;top:0;}
        #center{margin: 0 200px;background-color: blue;height: 200px;}

    或者利用弹性盒子

        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            html,
            body {
                height: 100%;
            }
    
            body {
                display: flex;
            }
    
            .left {
                width: 100px;
                background-color: rgb(199, 170, 223);
            }
    
            .center {
                background-color: rgb(151, 228, 148);
                flex: 1;
            }
    
            .right {
                width: 100px;
                background-color: rgb(199, 170, 223);
    
    
            }
        </style>
    
    <body>
        <div class="left">left</div>
        <div class="center">center</div>
        <div class="right">right</div>
    </body>
    

    3. 阐述清楚浮动的几种方式(常见问题)

    1.父级div定义 height

    原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。
    优点:简单、代码少、容易掌握
    缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题

    2.父级div定义 overflow:hidden

    原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度
    优点:简单、代码少、浏览器支持好

    4. 结尾处加空div标签 clear:both

    原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度
    优点:简单、代码少、浏览器支持好、不容易出现怪问题

    缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不好

    5. 解释css sprites ,如何使用?

    CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。

    CSS Sprites为一些大型的网站节约了带宽,让提高了用户的加载速度和用户体验,不需要加载更多的图片

    6. 如何用原生js给一个按钮绑定两个onclick事件?

    Var  btn=document.getElementById(‘btn’);

    //事件监听 绑定多个事件

    var btn4 = document.getElementById("btn4");

    btn4.addEventListener("click",hello1);

    btn4.addEventListener("click",hello2);

    function hello1(){

     alert("hello 1");

    }

    function hello2(){

     alert("hello 2");

    }

    7. 拖拽会用到哪些事件

    · dragstart:拖拽开始时在被拖拽元素上触发此事件,监听器需要设置拖拽所需数据,从操作系统拖拽文件到浏览器时不触发此事件.

    · dragenter:拖拽鼠标进入元素时在该元素上触发,用于给拖放元素设置视觉反馈,如高亮

    · dragover:拖拽时鼠标在目标元素上移动时触发.监听器通过阻止浏览器默认行为设置元素为可拖放元素.

    · dragleave:拖拽时鼠标移出目标元素时在目标元素上触发.此时监听器可以取消掉前面设置的视觉效果.

    · drag:拖拽期间在被拖拽元素上连续触发

    · drop:鼠标在拖放目标上释放时,在拖放目标上触发.此时监听器需要收集数据并且执行所需操作.如果是从操作系统拖放文件到浏览器,需要取消浏览器默认行为.

    · dragend:鼠标在拖放目标上释放时,在拖拽元素上触发.将元素从浏览器拖放到操作系统时不会触发此事件.

    8. 请列举jquery中的选择器:

    9. Javascript中的定时器有哪些?他们的区别及用法是什么?

    setTimeout 只执行一次
    setInterval 会一直重复执行

    9.请描述一下 cookies sessionStorage和localstorage区别

    相同点:都存储在客户端
    不同点:1.存储大小

    · cookie数据大小不能超过4k。

    · sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。

    2.有效时间

    · localStorage    存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;

    · sessionStorage  数据在当前浏览器窗口关闭后自动删除。

    · cookie          设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭

    3. 数据与服务器之间的交互方式

    · cookie的数据会自动的传递到服务器,服务器端也可以写cookie到客户端

    · sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。

    10.计算一个数组arr所有元素的和

    var arr1=[1,2,3,4,5,6,7,8,9];

    var sum1=0;

    for (var i=0;i<=arr1.length;i++) {

    if (typeof arr1[i]=="number") {

    sum1+=arr1[i];

    }

    }

    document.write(sum1);

    //====================================

    function sum2(arr){

    var all=0;

    for (var i=0;i<arr.length;i++) {

    if (typeof arr[i]=="number") {

    all+=arr[i];

    }

    }

    return all;

    }

    document.write(sum2([1,2,3,4]));

    11.编写一个方法去掉数组里面 重复的内容  var arr=[1,2,3,4,5,1,2,3]

    一个数组去重的简单实现

     

    var arr = ['abc','abcd','sss','2','d','t','2','ss','f','22','d'];

    //定义一个新的数组

    var s = [];

    //遍历数组

    for(var i = 0;i<arr.length;i++){

        if(s.indexOf(arr[i]) == -1){  //判断在s数组中是否存在,不存在则push到s数组中

            s.push(arr[i]);

        }

    }

    console.log(s);

    //输出结果:["abc", "abcd", "sss", "2", "d", "t", "ss", "f", "22"]

    方法二:用sort()  然后相邻比较也可以实现

    12.document.write和innerHTML的区别:

    document.write是直接写入到页面的内容流,如果在写之前没有调用document.open, 浏览器会自动调用open。每次写完关闭之后重新调用该函数,会导致页面被重写。

    innerHTML则是DOM页面元素的一个属性,代表该元素的html内容。你可以精确到某一个具体的元素来进行更改。如果想修改document的内容,则需要修改document.documentElement.innerElement。

    innerHTML将内容写入某个DOM节点,不会导致页面全部重绘

     

    innerHTML很多情况下都优于document.write,其原因在于其允许更精确的控制要刷新页面的那一个部分。

    13.ajax的步骤

    什么是ajax?

    ajax(异步javascript xml) 能够刷新局部网页数据而不是重新加载整个网页。

    如何使用ajax?

    第一步,创建xmlhttprequest对象,var xmlhttp =new XMLHttpRequest();XMLHttpRequest对象用来和服务器交换数据。

    var xhttp;

    if (window.XMLHttpRequest) {

    //现代主流浏览器

    xhttp = new XMLHttpRequest();

    } else {

    // 针对浏览器,比如IE5或IE6

    xhttp = new ActiveXObject("Microsoft.XMLHTTP");

    }

    第二步,使用xmlhttprequest对象的open()和send()方法发送资源请求给服务器。

    第三步,使用xmlhttprequest对象的responseText或responseXML属性获得服务器的响应。

    第四步,onreadystatechange函数,当发送请求到服务器,我们想要服务器响应执行一些功能就需要使用onreadystatechange函数,每次xmlhttprequest对象的readyState发生改变都会触发onreadystatechange函数

    14.xml和json的区别,请用四个词语来形容

    ·  JSON相对于XML来讲,数据的体积小,传递的速度更快些

    ·  JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互

    ·  XML对数据描述性比较好;

    ·  JSON的速度要远远快于XML

     

    15.清楚浮动的方法?(多次出现在面试题)

    1.父级div定义 height
    原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。
    优点:简单、代码少、容易掌握

    缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题

    2,结尾处加空div标签 clear:both

    原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度
    优点:简单、代码少、浏览器支持好、不容易出现怪问题
    缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不好
    3,父级div定义 伪类:after 和 zoom

    原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE转有属性)可解决ie6,ie7浮动问题
    优点:浏览器支持好、不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)
    缺点:代码多、不少初学者不理解原理,要两句代码结合使用才能让主流浏览器都支持
    4,父级div定义 overflow:hidden

    原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度
    优点:简单、代码少、浏览器支持好
    缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。

     

    16.box-sizing常用的属性有哪些?分别有什么作用?

    属性值

    · box-sizing:content-box

    · box-sizing:border-box

    · box-sizing:inherit

     

    content-box

    · 这是box-sizing的默认属性值

    · 是CSS2.1中规定的宽度高度的显示行为

    · 在CSS中定义的宽度和高度就对应到元素的内容框

    · 在CSS中定义的宽度和高度之外绘制元素的内边距和边框

     

    border-box

    · 在CSS中微元素设定的宽度和高度就决定了元素的边框盒

    · 即为元素在设置内边距和边框是在已经设定好的宽度和高度之内进行绘制

    · CSS中设定的宽度和高度减去边框和内间距才能得到元素内容所占的实际宽度和高度

    (Q1)box-sizing: content-box|border-box|inherit;
    (Q2)content-box:宽度和高度分别应用到元素的内容框。在宽度和高度之外绘制元素的内边距和边框(元素默认效果)。
    border-box:元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。

     

    17.css选择器有哪些,选择器的权重的优先级

    选择器类型

    1、ID  #id

    2、class  .class

    3、标签  p

    4、通用  *

    5、属性  [type="text"]

    6、伪类  :hover

    7、伪元素  ::first-line

    8、子选择器、相邻选择器

    三、权重计算规则

    1. 第一等:代表内联样式,如: style=””,权值为1000。

    2. 第二等:代表ID选择器,如:#content,权值为0100。

    3. 第三等:代表类,伪类和属性选择器,如.content,权值为0010。

    4. 第四等:代表类型选择器和伪元素选择器,如div p,权值为0001。

    5. 通配符、子选择器、相邻选择器等的。如*、>、+,权值为0000。

    6. 继承的样式没有权值。

    18. 块级元素水平垂直居中的方法有哪些(三个方法)

    让div等块级元素水平和垂直都居中,即永远处于屏幕的正中央,当我们做如登录块时非常有用!

     实现一、原理:要让div等块级元素水平和垂直居中,必需知道该div等块级元素的宽度和高度,然后设置位置为绝对位置,距离页面窗口左边框和上边框的距离设置为50%,这个50%就是指页面窗口的宽度和高度的50%,最后将该div等块级元素分别左移和上移,左移和上移的大小就是该div等块级元素宽度和高度的一半。

       CSS代码:

    .mycss{ 

       width:300px;  

       height:200px;  

       position:absolute;  

       left:50%;  

       top:50%;  

       margin:-100px 0 0 -150px }

     实现二原理:利用CSS的margin设置为auto让浏览器自己帮我们水平和垂直居中。

       CSS代码:

    .mycss{

        position: absolute;

        left: 0px;

        right: 0;

        top: 0;

        bottom: 0;

        margin: auto;

        height: 200px;

        width: 300px;

    }

    jQuery实现水平和垂直居中

     原理:jQuery实现水平和垂直居中的原理就是通过jQuery设置div等块级元素的CSS,获取div等块级元素的左、上的边距偏移量,边距偏移量的算法就是用页面窗口 的宽度减去该div等块级元素的宽度,得到的值再除以2即左偏移量,右偏移量算法相同。注意div等块级元素的CSS设置要在resize()方法中完成,就是每次改变窗口大 小时,都要执行设置div等块级元素的CSS。

    jquery代码:

    $(window).resize(function(){

        $(".myblock").css({

            position: "absolute",

            left: ($(window).width() - $(".myblock").outerWidth())/2,

            top: ($(window).height() - $(".myblock").outerHeight())/2     });        

    });

    此外在页面载入时,就需要调用resize()方法

    $(function(){

        $(window).resize();

    });

     

    19.三个盒子,左右定宽,中间自适应有几种方法

    第一种:左右侧采用浮动 中间采用margin-left 和 margin-right 方法。

    代码如下:

    <div style="width:100%; margin:0 auto;"> 

     

           <div style="width:200px; float:right; background-color:#960">这是右侧的内容 固定宽度</div>

     

           <div style="width:150px; float:left; background:#6FF">这是左侧的内容 固定宽度</div>

     

           <div style="margin-left:150px;margin-right:200px; background-color:#9F3">中间内容,自适应宽度</div>

     

        </div>

    第二种:左右两侧采用绝对定位 中间同样采用margin-left margin-right方法:

     

    第三种负的margin

    使用这种方法就稍微复杂了一些了,使用的是负的margin值,而且html标签也增加了,先来看其代码吧:

    <div id="main">

     <div id="mainContainer">main content</div></div><div id="left">

     <div id="leftContainer" class="inner">left content</div></div><div id="right">

     <div id="rightContainer" class="inner">right</div></div>

    #main {

     float: left;

     width: 100%;

    }

    #mainContainer {

     margin: 0 230px;

     height: 200px;

     background: green;

    }

    #left {

     float: left;

     margin-left: -100%;

     width: 230px} 

    #right {

     float: left;

     margin-left: -230px;

     width: 230px;

    } 

    #left .inner,

    #right .inner {

     background: orange;

     margin: 0 10px;

     height: 200px;

    }

    20.js有几种数据类型,其中基本数据类型有哪些

    五种基本类型: Undefined、Null、Boolean、Number和String。

    1中复杂的数据类型————Object,Object本质上是由一组无序的名值对组成的。

    Object、Array和Function则属于引用类型

     

    21.undefined 和 null 区别

     

    null: Null类型,代表“空值”,代表一个空对象指针,使用typeof运算得到 “object”,所以你可以认为它是一个特殊的对象值。

    undefined: Undefined类型,当一个声明了一个变量未初始化时,得到的就是undefined。

    null是javascript的关键字,可以认为是对象类型,它是一个空对象指针,和其它语言一样都是代表“空值”,不过 undefined 却是javascript才有的。undefined是在ECMAScript第三版引入的,为了区分空指针对象和未初始化的变量,它是一个预定义的全局变量。没有返回值的函数返回为undefined,没有实参的形参也是undefined。

     

    javaScript权威指南: null 和 undefined 都表示“值的空缺”,你可以认为undefined是表示系统级的、出乎意料的或类似错误的值的空缺,而null是表示程序级的、正常的或在意料之中的值的空缺。

    22.http 和 https 有何区别?如何灵活使用?

     

    http是HTTP协议运行在TCP之上。所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。

    https是HTTP运行在SSL/TLS之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份


    23.常见的HTTP状态码

    2开头 (请求成功)表示成功处理了请求的状态代码。

    200   (成功)  服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 
    201   (已创建)  请求成功并且服务器创建了新的资源。 
    202   (已接受)  服务器已接受请求,但尚未处理。 
    203   (非授权信息)  服务器已成功处理了请求,但返回的信息可能来自另一来源。 
    204   (无内容)  服务器成功处理了请求,但没有返回任何内容。 
    205   (重置内容) 服务器成功处理了请求,但没有返回任何内容。
    206   (部分内容)  服务器成功处理了部分 GET 请求。

    3开头 (请求被重定向)表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

    300   (多种选择)  针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。 
    301   (永久移动)  请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
    302   (临时移动)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
    303   (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
    304   (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 
    305   (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。 
    307   (临时重定向)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

    4开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。

    400   (错误请求) 服务器不理解请求的语法。 
    401   (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 
    403   (禁止) 服务器拒绝请求。
    404   (未找到) 服务器找不到请求的网页。
    405   (方法禁用) 禁用请求中指定的方法。 
    406   (不接受) 无法使用请求的内容特性响应请求的网页。 
    407   (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
    408   (请求超时)  服务器等候请求时发生超时。 
    409   (冲突)  服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。 
    410   (已删除)  如果请求的资源已永久删除,服务器就会返回此响应。 
    411   (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。 
    412   (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。 
    413   (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。 
    414   (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。 
    415   (不支持的媒体类型) 请求的格式不受请求页面的支持。 
    416   (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。 
    417   (未满足期望值) 服务器未满足"期望"请求标头字段的要求。

    5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

    500   (服务器内部错误)  服务器遇到错误,无法完成请求。 
    501   (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。 
    502   (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。 
    503   (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。 
    504   (网关超时)  服务器作为网关或代理,但是没有及时从上游服务器收到请求。 
    505   (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

     

     

    24. 如何进行网站性能优化

    1. 从用户角度而言,优化能够让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验。
    2. 从服务商角度而言,优化能够减少页面请求数、或者减小请求所占带宽,能够节省可观的资源。
      总之,恰当的优化不仅能够改善站点的用户体验并且能够节省相当的资源利用。
      前端优化的途径有很多,按粒度大致可以分为两类,第一类是页面级别的优化,例如 HTTP请求数、脚本的无阻塞加载、内联脚本的位置优化等 ;第二类则是代码级别的优化,例如 Javascript中的DOM 操作优化、CSS选择符优化、图片优化以及 HTML结构优化等等。另外,本着提高投入产出比的目的,后文提到的各种优化策略大致按照投入产出比从大到小的顺序排列。
      一、页面级优化
    1. JavaScript 压缩和模块打包
    2. 按需加载资源
    3. 在使用 DOM 操作库时用上 array-ids
    4. 缓存
    5. 启用 HTTP/2
    6. 应用性能分析
    7. 使用负载均衡方案
    8. 为了更快的启动时间考虑一下同构
    9. 使用索引加速数据库查询
    10. 使用更快的转译方案
    11. 避免或最小化 JavaScript 和 CSS 的使用而阻塞渲染
    12. 用于未来的一个建议:使用 service workers + 流
    13. 图片编码优化

    25. react和vue有哪些不同,说说你对这两个框架的看法

    相同点

    · 都支持服务器端渲染

    · 都有Virtual DOM,组件化开发,通过props参数进行父子组件数据的传递,都实现webComponent规范

    · 数据驱动视图

    · 都有支持native的方案,React的React native,Vue的weex

    不同点

    · React严格上只针对MVC的view层,Vue则是MVVM模式

    · virtual DOM不一样,vue会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树.而对于React而言,每当应用的状态被改变时,全部组件都会重新渲染,所以react中会需要shouldComponentUpdate这个生命周期函数方法来进行控制

    · 组件写法不一样, React推荐的做法是 JSX + inline style, 也就是把HTML和CSS全都写进JavaScript了,即'all in js'; Vue推荐的做法是webpack+vue-loader的单文件组件格式,即html,css,jd写在同一个文件;

    · 数据绑定: vue实现了数据的双向绑定,react数据流动是单向的

    · state对象在react应用中不可变的,需要使用setState方法更新状态;在vue中,state对象不是必须的,数据由data属性在vue对象中管理

    26.什么是mvvm mvc是什么区别 原理

    一、MVC(Model-View-Controller)

    MVC是比较直观的架构模式,用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model(数据持久化)->View(将结果反馈给View)。

    MVC使用非常广泛,比如JavaEE中的SSH框架

     

    三、MVVM(Model-View-ViewModel)

    如果说MVP是对MVC的进一步改进,那么MVVM则是思想的完全变革。它是将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应view

    27.px和em的区别

    px表示像素 (计算机屏幕上的一个点:1px = 1/96in),是绝对单位,不会因为其他元素的尺寸变化而变化;

    · 

    · 

    em表示相对于父元素的字体大小。em是相对单位 ,没有一个固定的度量值,而是由其他元素尺寸来决定的相对值。

    28.优雅降级和渐进增强

    渐进增强(Progressive Enhancement):一开始就针对低版本浏览器进行构建页面,完成基本的功能,然后再针对高级浏览器进行效果、交互、追加功能达到更好的体验。

    优雅降级(Graceful Degradation):一开始就构建站点的完整功能,然后针对浏览器测试和修复。比如一开始使用 CSS3 的特性构建了一个应用,然后逐步针对各大浏览器进行 hack 使其可以在低版本浏览器上正常浏览。

    其实渐进增强和优雅降级并非什么新概念,只是旧的概念换了一个新的说法。在传统软件开发中,经常会提到向上兼容向下兼容的概念。渐进增强相当于向上兼容,而优雅降级相当于向下兼容

    29.eval()的作用

    把字符串参数解析成JS代码并运行,并返回执行的结果;

    eval("2+3");//执行加运算,并返回运算值。  

    eval("varage=10");//声明一个age变量  

    eval的作用域

    functiona(){  

    1.  eval("var x=1"); //等效于 var x=1;  

    2.  console.log(x); //输出1  

    3. }  

    4. a();  

    5. console.log(x);//错误 x没有定

    30. JS哪些操作会造成内存泄露

    1)意外的全局变量引起的内存泄露

    function leak(){  

      leak="xxx";//leak成为一个全局变量,不会被回收  

    }

    2)闭包引起的内存泄露

    3)3)没有清理的DOM元素引用

    4)被遗忘的定时器或者回调 5)子元素存在引起的内存泄露

    31. 浏览器缓存有哪些,通常缓存有哪几种

    一、http缓存

    二、websql

    cookie

    localstorage

    sessionstorage

    flash缓存

    32:bootstrap响应式实现的原理

    百分比布局+媒体查询

    33.关于JS事件冒泡与JS事件代理(事件委托)

     事件作为DOM操作重要的一环,需要大家好好理解和运用,今天特意看了一下事件冒泡和事件代理的相关资料,感触颇深,也深感自己的无知不知道多浪费了多少内存,废话不多说进入正题:

    1.事件冒泡:

          通俗易懂的来讲,就是当一个子元素的事件被触发的时候(如onclick事件),该事件会从事件源(被点击的子元素)开始逐级向上传播,触发父级元素的点击事件。

    2.事件委托

        事件委托,首先按字面的意思就能看你出来,是将事件交由别人来执行,再联想到上面讲的事件冒泡,是不是想到了?对,就是将子元素的事件通过冒泡的形式交由父元素来执行。下面经过详细的例子来说明事件委托:

    有可能在开发的时候会遇到这种情况:如导航每一个栏目都要加一个事件,你可能会通过遍历来给每个栏目添加事件:

    事件委托是怎

    1. var ul = document.getElementById('parentUl');  

    2.     ul.οnclick=function (event) {  

    3.       var e = event||window.event,  

    4.               source = e.target || e.srcElement;//target表示在事件冒泡中触发事件的源元素,在IE中是srcElement  

    5.         if(source.nodeName.toLowerCase() == "li"){   //判断只有li触发的才会输出内容  

    6.             alert(source.innerHTML);  

    7.         }  

    8.         stopPropagation(e);                           //阻止继续冒泡  

    9.     };  

    10.     function addElement() {  

    11.         var li = document.createElement('li');  

    12.         li.innerHTML="我是新孩子";  

    13.         ul.appendChild(li);  

    14.     }  

    34. CSS样式覆盖规则

    规则一:由于继承而发生样式冲突时,最近祖先获胜。

    规则二:继承的样式和直接指定的样式冲突时,直接指定的样式获胜

    规则三:直接指定的样式发生冲突时,样式权值高者获胜。

    样式的权值取决于样式的选择器,权值定义如下表。

    CSS选择器

    权值

    标签选择器

    1

    类选择器

    10

    ID选择器

    100

    内联样式

    1000

    伪元素(:first-child等)

    1

    伪类(:link等)

    10

    可以看到,内联样式的权值>>ID选择器>>类选择器>>标签选择器,除此以外,后代选择器的权值为每项权值之和,比如”#nav .current a”的权值为100 + 10 + 1 = 111。

    规则四:样式权值相同时,后者获胜。

    规则五:!important的样式属性不被覆盖。

    !important可以看做是万不得已的时候,打破上述四个规则的”金手指”。如果你一定要采用某个样式属性,而不让它被覆盖的,可以在属性值后加上!important,以规则四的例子为例,”.byline a {color:red !important;}”可以强行使链接显示红色。大多数情况下都可以通过其他方式来控制样式的覆盖,不能滥用!important。

    35. 介绍一下box-sizing属性

    兼容问题 
    首先,box-sizing属性在FireFox中存在兼容问题,所以需要使用-moz-box-sizing做一下兼容。

     

    属性值

    · box-sizing:content-box

    · box-sizing:border-box

    · box-sizing:inherit

     

    content-box

    · 这是box-sizing的默认属性值

    · 是CSS2.1中规定的宽度高度的显示行为

    · 在CSS中定义的宽度和高度就对应到元素的内容框

    · 在CSS中定义的宽度和高度之外绘制元素的内边距和边框

     

    border-box

    · 在CSS中微元素设定的宽度和高度就决定了元素的边框盒

    · 即为元素在设置内边距和边框是在已经设定好的宽度和高度之内进行绘制

    · CSS中设定的宽度和高度减去边框和内间距才能得到元素内容所占的实际宽度和高度

    36. css选择符有哪些?优先级算法如何计算?(常见)

    37. 请简要描述margin重合问题,及解决方式

    1.同向margin的重叠:
    1图片的margin-top与3图片的margin-top发生重叠,2图片的margin-bottom与3图片的margin-bottom发生重叠。这时候重叠之后的margin值由发生重叠两片的最大值决定;如果其中一个出现负值,则由最大的正边距减去绝对值最大的负边距,如果没有最大正边距,则由0减去绝对值最大的负边距。
    解决同向重叠的方法:
    (1)在最外层的div中加入overflow:hidden;zoom:1
    (2)在最外层加入padding:1px;属性
    (3)在最外层加入:border:1px solid #cacbcc;
    2.异向重叠问题:
    1图片的margin-bottom与2图片的margin-top发生重叠,这时候重叠之后的margin值由发生重叠两图片的最大值的决定的。
    解决异向重叠问题:
    float:left(只能解决IE6浏览器中的异向重叠问题,可以解决IE8以上、chorme、firefox、opera下的同向重叠问题)

     

    38:position的值,relative\absolute\fixed分别相对于进行谁定位,有什么区别,什么时候用?

    39.解释下CSS sprites,以及你要如何在页面或网站中使用它。

    CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background-repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置

     

    40.什么是闭包,如何使用它,为什么要使用它?

    包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。

    所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

    使用闭包的注意点:

    · 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

    · 闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

     

    41.请解释JSONP的工作原理,以及它为什么不是真正的AJAX。

    JSONP (JSON with Padding)是一个简单高效的跨域方式,HTML中的script标签可以加载并执行其他域的javascript,于是我们可以通过script标记来动态加载其他域的资源。例如我要从域A的页面pageA加载域B的数据,那么在域B的页面pageB中我以JavaScript的形式声明pageA需要的数据,然后在 pageA中用script标签把pageB加载进来,那么pageB中的脚本就会得以执行。JSONP在此基础上加入了回调函数,pageB加载完之后会执行pageA中定义的函数,所需要的数据会以参数的形式传递给该函数。JSONP易于实现,但是也会存在一些安全隐患,如果第三方的脚本随意地执行,那么它就可以篡改页面内容,截获敏感数据。但是在受信任的双方传递数据,JSONP是非常合适的选择。

    AJAX是不跨域的,而JSONP是一个是跨域的,还有就是二者接收参数形式不一样!

    42.请解释一下JavaScript的同源策略。

    在客户端编程语言中,如javascript和 ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义。同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那么什么叫相同域,什么叫不同的域呢?当两个域具有相同的协议, 相同的端口,相同的host,那么我们就可以认为它们是相同的域。同源策略还应该对一些特殊情况做处理,比如限制file协议下脚本的访问权限。本地的HTML文件在浏览器中是通过file协议打开的,如果脚本能通过file协议访问到硬盘上其它任意文件,就会出现安全隐患,目前IE8还有这样的隐患。

    43.怎样添加、移除、移动、复制、创建和查找节点?

     1)创建新节点

    createDocumentFragment() //创建一个DOM片段
    createElement() //创建一个具体的元素
    createTextNode() //创建一个文本节点

    2)添加、移除、替换、插入
    appendChild() //添加
    removeChild() //移除
    replaceChild() //替换
    insertBefore() //插入

    3)查找
    getElementsByTagName() //通过标签名称
    getElementsByName() //通过元素的Name属性的值
    getElementById() //通过元素Id,唯一性

    44.谈谈垃圾回收机制方式及内存管理

    回收机制方式

    1、定义和用法:垃圾回收机制(GC:Garbage Collection),执行环境负责管理代码执行过程中使用的内存。

    2、原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。但是这个过程不是实时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行。

    3、实例如下:

    function fn1() {

        var obj = {name: 'hanzichi', age: 10};

    }

    function fn2() {

        var obj = {name:'hanzichi', age: 10};

       return obj;

    }var a = fn1();var b = fn2();

    fn1中定义的obj为局部变量,而当调用结束后,出了fn1的环境,那么该块内存会被js引擎中的垃圾回收器自动释放;在fn2被调用的过程中,返回的对象被全局变量b所指向,所以该块内存并不会被释放。

     4、垃圾回收策略:标记清除(较为常用)和引用计数。

    标记清除:

      定义和用法:当变量进入环境时,将变量标记"进入环境",当变量离开环境时,标记为:"离开环境"。某一个时刻,垃圾回收器会过滤掉环境中的变量,以及被环境变量引用的变量,剩下的就是被视为准备回收的变量。

      到目前为止,IE、Firefox、Opera、Chrome、Safari的js实现使用的都是标记清除的垃圾回收策略或类似的策略,只不过垃圾收集的时间间隔互不相同。

    引用计数:

      定义和用法:引用计数是跟踪记录每个值被引用的次数。

      基本原理:就是变量的引用次数,被引用一次则加1,当这个引用计数为0时,被视为准备回收的对象。

    45、jQuery的事件委托方法bind 、live、delegate、on之间有什么区别?

    (1)、bind 【jQuery 1.3之前】

    定义和用法:主要用于给选择到的元素上绑定特定事件类型的监听函数;

    语法:bind(type,[data],function(eventObject));

    特点:

    (1)、适用于页面元素静态绑定。只能给调用它的时候已经存在的元素绑定事件,不能给未来新增的元素绑定事件。

    (2)、当页面加载完的时候,你才可以进行bind(),所以可能产生效率问题。

    实例如下:$( "#members li a" ).bind( "click", function( e ) {} );

    (2)、live 【jQuery 1.3之后】

    定义和用法:主要用于给选择到的元素上绑定特定事件类型的监听函数;

    语法:live(type, [data], fn);

    特点:

    (1)、live方法并没有将监听器绑定到自己(this)身上,而是绑定到了this.context上了。

    (2)、live正是利用了事件委托机制来完成事件的监听处理,把节点的处理委托给了document,新添加的元素不必再绑定一次监听器。

    (3)、使用live()方法但却只能放在直接选择的元素后面,不能在层级比较深,连缀的DOM遍历方法后面使用,即$(“ul”").live...可以,但$("body").find("ul").live...不行; 

    实例如下:$( document ).on( "click", "#members li a", function( e ) {} );

    (3)、delegate 【jQuery 1.4.2中引入】

    定义和用法:将监听事件绑定在就近的父级元素上

    语法:delegate(selector,type,[data],fn)

    特点:

    (1)、选择就近的父级元素,因为事件可以更快的冒泡上去,能够在第一时间进行处理。

    (2)、更精确的小范围使用事件代理,性能优于.live()。可以用在动态添加的元素上。

    实例如下:

    $("#info_table").delegate("td","click",function(){/*显示更多信息*/});

    $("table").find("#info").delegate("td","click",function(){/*显示更多信息*/});

    (4)、on 【1.7版本整合了之前的三种方式的新事件绑定机制】

    定义和用法:将监听事件绑定到指定元素上。

    语法:on(type,[selector],[data],fn)

    实例如下:$("#info_table").on("click","td",function(){/*显示更多信息*/});参数的位置写法与delegate不一样。

    说明:on方法是当前JQuery推荐使用的事件绑定方法,附加只运行一次就删除函数的方法是one()。

     总结:.bind(), .live(), .delegate(),.on()分别对应的相反事件为:.unbind(),.die(), .undelegate(),.off()

    46、px和em的区别

    相同点:px和em都是长度单位;

    异同点:px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,并且em会继承父级元素的字体大小。
    浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。

    47、浏览器的内核分别是什么?

    IE: trident内核

    Firefox:gecko内核

    Safari:webkit内核

    Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核

    Chrome:Blink(基于webkit,Google与Opera Software共同开发)

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

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

    优雅降级 graceful degradation:
    一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

    区别:

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

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

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

    49、sessionStorage 、localStorage 和 cookie 之间的区别

     共同点:用于浏览器端存储的缓存数据

    不同点:

    (1)、存储内容是否发送到服务器端:当设置了Cookie后,数据会发送到服务器端,造成一定的宽带浪费;

            web storage,会将数据保存到本地,不会造成宽带浪费;

    (2)、数据存储大小不同:Cookie数据不能超过4K,适用于会话标识;web storage数据存储可以达到5M;

    (3)、数据存储的有效期限不同:cookie只在设置了Cookid过期时间之前一直有效,即使关闭窗口或者浏览器;

            sessionStorage,仅在关闭浏览器之前有效;localStorage,数据存储永久有效;

    (4)、作用域不同:cookie和localStorage是在同源同窗口中都是共享的;sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;

    50、浏览器是如何渲染页面的?

    渲染的流程如下:

    1.解析HTML文件,创建DOM树。

       自上而下,遇到任何样式(link、style)与脚本(script)都会阻塞(外部样式不阻塞后续外部脚本的加载)。

    2.解析CSS。优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式;

    3.将CSS与DOM合并,构建渲染树(Render Tree)

    4.布局和绘制,重绘(repaint)和重排(reflow)

    51:js的基本数据类型

    JavaScript中有五种基本数据类型,它们分别是:undefined,null,boolean,number,string。

    还有一种复杂数据类型-object。 

    52:事件委托

    事件委托就是利用的DOM事件的事件捕获阶段。把具体dom上发生的事件,委托给更大范围的dom去处理。好比送信员,如果每次都把信件送给每一户,非常繁琐。但是如果交给一个大范围的管理者,比如小区的传达室,那么事情会变得非常简单。事件委托就类似这种原理,我页面中有很多按钮,如果不使用事件委托,我只能在每个按钮上注册事件。非常麻烦。但如果我把事件注册在一个大范围的div(假设所有的按钮都在这个div中),那么我只要注册一次事件,就可以处理所有按钮(只要按钮包含在上述div中)事件的响应了

    53:CSS3新增了很多的属性,下面一起来分析一下新增的一些属性:

    1.CSS3边框:

    · border-radius:CSS3圆角边框。在 CSS2 中添加圆角矩形需要技巧,我们必须为每个圆角使用不同的图片,在 CSS3 中,创建圆角是非常容易的,在 CSS3 中,border-radius 属性用于创建圆角。border:2px solid;

    · box-shadow:CSS3边框阴影。在 CSS3 中,box-shadow 用于向方框添加阴影。box-shadow:10px 10px 5px #888888;

    · border-image:CSS3边框图片。通过 CSS3 的 border-image 属性,您可以使用图片来创建边框。border-image:url(border.png) 30 30 round;

    2.CSS3背景:

    · background-size: 属性规定背景图片的尺寸。在 CSS3 之前,背景图片的尺寸是由图片的实际尺寸决定的。在 CSS3 中,可以规定背景图片的尺寸,这就允许我们在不同的环境中重复使用背景图片。您能够以像素或百分比规定尺寸。如果以百分比规定尺寸,那么尺寸相对于父元素的宽度和高度。

    · background-origin :属性规定背景图片的定位区域。背景图片可以放置于 content-box、padding-box 或 border-box 区域。

    3.CSS3文字效果:

    · text-shadow:在 CSS3 中,text-shadow 可向文本应用阴影。text-shadow:5px 5px 5px #FFFFFF;

    · word-wrap :单词太长的话就可能无法超出某个区域,允许对长单词进行拆分,并换行到下一行:p{word-wrap:break-word;}

    4.CSS3 2D转换:

    transform:通过 CSS3 转换,我们能够对元素进行移动、缩放、转动、拉长或拉伸。

    · translate():元素从其当前位置移动,根据给定的 left(x 坐标) 和 top(y 坐标) 位置参数:transform:translate(50px,100px);值 translate(50px,100px) 把元素从左侧移动 50 像素,从顶端移动 100 像素。

    · rotate():元素顺时针旋转给定的角度。允许负值,元素将逆时针旋转。transform:rotate(30deg);值 rotate(30deg) 把元素顺时针旋转 30 度。

    · scale():元素的尺寸会增加或减少,根据给定的宽度(X 轴)和高度(Y 轴)参数:transform:scale(2,4);值 scale(2,4) 把宽度转换为原始尺寸的 2 倍,把高度转换为原始高x() 5.CSS3 3D转换:

    · rotateX():元素围绕其 X 轴以给定的度数进行旋转。transform:rotateX(120deg);

    · rotateY():元素围绕其 Y 轴以给定的度数进行旋转。transform:rotateY(120deg);

    6.CSS3 过渡:当元素从一种样式变换为另一种样式时为元素添加效果。

    7.CSS3动画:通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片、Flash 动画以及 JavaScript。

    8.CSS3多列:

    · column-count:属性规定元素应该被分隔的列数。

    · column-gap:属性规定列之间的间隔。

    · column-rule :属性设置列之间的宽度、样式和颜色规则。

    9.CSS3用户界面:

    · resize:属性规定是否可由用户调整元素尺寸。

    · box-sizing:属性允许您以确切的方式定义适应某个区域的具体内容。

    · outline-offset :属性对轮廓进行偏移,并在超出边框边缘的位置绘制轮廓。

    54:从输入url到显示页面,都经历了什么

    第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。

    第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。

    第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
    第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
    第五步:重复第四步,直到找到正确的纪录

    2种解释:

    一般会经历以下几个过程:

    1、首先,在浏览器地址栏中输入url

    2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作。

    3、在发送http请求前,需要域名解析(DNS解析)(DNS(域名系统,Domain Name System)是互联网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住IP地址。),解析获取相应的IP地址。

    4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手(TCP即传输控制协议。TCP连接是互联网连接协议集的一种。)

    5、握手成功后,浏览器向服务器发送http请求,请求数据包

    6、服务器处理收到的请求,将数据返回至浏览器

    7、浏览器收到HTTP响应

    8、读取页面内容,浏览器渲染,解析html源码

    9、生成Dom树、解析css样式、js交互

    10、客户端和服务器交互

    11、ajax查询

    55:对<meta></meta>标签有什么理解

    什么是meta标签?

    引自下W3school的定义说明一下。

    元数据(metadata)是关于数据的信息。

    标签提供关于 HTML 文档的元数据。元数据不会显示在页面上,但是对于机器是可读的。

    典型的情况是,meta 元素被用于规定页面的描述、关键词、文档的作者、最后修改时间以及其他元数据。

    标签始终位于 head 元素中。

    元数据可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 web 服务。

    其实对上面的概念简单总结下就是:<meta> 标签提供关于 HTML 文档的元数据。它不会显示在页面上,但是对于机器是可读的。可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 web 服务。

    meta的作用

    meta里的数据是供机器解读的,告诉机器该如何解析这个页面,还有一个用途是可以添加服务器发送到浏览器的http头部内容

    56:new操作符到底到了什么

    先看代码

    [javascript] view plain copy

    1. var Func=function(){  

    2. };  

    3. var func=new Func ();  

    new共经过了4几个阶段

    1、创建一个空对象

    [javascript] view plain copy

    1. varobj=new Object();  

    2、设置原型链

    [javascript] view plain copy

    1. obj.__proto__= Func.prototype;  

    3、让Func中的this指向obj,并执行Func的函数体。

    [javascript] view plain copy

    1. var result =Func.call(obj);  

    4、判断Func的返回值类型:

    如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象。

    [javascript] view plain copy

    1. if (typeof(result) == "object"){  

    2.   func=result;  

    3. }  

    4. else{  

    5.     func=obj;;  

    6. }  

    57:h5新特性

    HTML5新特性 —— 新特性
    (1)新的语义标签和属性
    (2)表单新特性
    (3)视频和音频
    (4)Canvas绘图
    (5)SVG绘图
    (6)地理定位
    (7)拖放API
    58:vue的生命周期

     

     

    58:请写出你对闭包的理解,并列出简单的理解

    使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。

    闭包有三个特性:

    1.函数嵌套函数 

    2.函数内部可以引用外部的参数和变量 

    3.参数和变量不会被垃圾回收机制回收

     

    59:display none visibility hidden区别?

    1.display:none是彻底消失,不在文档流中占位,浏览器也不会解析该元素;visibility:hidden是视觉上消失了,可以理解为透明度为0的效果,在文档流中占位,浏览器会解析该元素;

    2.使用visibility:hidden比display:none性能上要好,display:none切换显示时visibility,页面产生回流(当页面中的一部分元素需要改变规模尺寸、布局、显示隐藏等,页面重新构建,此时就是回流。所有页面第一次加载时需要产生一次回流),而visibility切换是否显示时则不会引起回流。

    60:JavaScript中如何检测一个变量是一个String类型?请写出函数实现

    typeof(obj) === "string"

    typeof obj === "string"

    obj.constructor === String

    61:如何理解闭包?

    1、定义和用法:当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的其它变量,如果返回的这个函数在外部被执行,就产生了闭包。

    2、表现形式:使函数外部能够调用函数内部定义的变量。

    3、实例如下:

    (1)、根据作用域链的规则,底层作用域没有声明的变量,会向上一级找,找到就返回,没找到就一直找,直到window的变量,没有就返回undefined。这里明显count 是函数内部的flag2 的那个count 。

    var count=10;   //全局作用域 标记为flag1function add(){

        var count=0;    //函数全局作用域 标记为flag2

        return function(){

            count+=1;   //函数的内部作用域        alert(count);

        }

    }var s = add()

    s();//输出1

    s();//输出2

    4、变量的作用域

    要理解闭包,首先必须理解Javascript特殊的变量作用域。

    变量的作用域分类:全局变量和局部变量。

    特点:

    1、函数内部可以读取函数外部的全局变量;在函数外部无法读取函数内的局部变量。

    2、函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!

     5、使用闭包的注意点

    1)滥用闭包,会造成内存泄漏:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

    2)会改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

    62:谈谈垃圾回收机制方式及内存管理

    回收机制方式

    1、定义和用法:垃圾回收机制(GC:Garbage Collection),执行环境负责管理代码执行过程中使用的内存。

    2、原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。但是这个过程不是实时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行。

    3、实例如下:

    function fn1() {

        var obj = {name: 'hanzichi', age: 10};

    }

    function fn2() {

        var obj = {name:'hanzichi', age: 10};

       return obj;

    }var a = fn1();var b = fn2();

    fn1中定义的obj为局部变量,而当调用结束后,出了fn1的环境,那么该块内存会被js引擎中的垃圾回收器自动释放;在fn2被调用的过程中,返回的对象被全局变量b所指向,所以该块内存并不会被释放。

     4、垃圾回收策略:标记清除(较为常用)和引用计数。

    标记清除:

      定义和用法:当变量进入环境时,将变量标记"进入环境",当变量离开环境时,标记为:"离开环境"。某一个时刻,垃圾回收器会过滤掉环境中的变量,以及被环境变量引用的变量,剩下的就是被视为准备回收的变量。

      到目前为止,IE、Firefox、Opera、Chrome、Safari的js实现使用的都是标记清除的垃圾回收策略或类似的策略,只不过垃圾收集的时间间隔互不相同。

    引用计数:

      定义和用法:引用计数是跟踪记录每个值被引用的次数。

      基本原理:就是变量的引用次数,被引用一次则加1,当这个引用计数为0时,被视为准备回收的对象。

    63:判断一个字符串中出现次数最多的字符,统计这个次数

    var str = 'asdfssaaasasasasaa';

    var json = {};

    for (var i = 0; i < str.length; i++) {

        if(!json[str.charAt(i)]){

           json[str.charAt(i)] = 1;

        }else{

           json[str.charAt(i)]++;

        }

    };var iMax = 0;var iIndex = '';for(var i in json){

        if(json[i]>iMax){

             iMax = json[i];

             iIndex = i;

        }

    }        console.log('出现次数最多的是:'+iIndex+'出现'+iMax+'次');

    64、$(document).ready()方法和window.onload有什么区别?

     (1)、window.onload方法是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行的。

     (2)、$(document).ready() 方法可以在DOM载入就绪时就对其进行操纵,并调用执行绑定的函数。

    65、 jquery中$.get()提交和$.post()提交有区别吗?

    相同点:都是异步请求的方式来获取服务端的数据;

    异同点:

    1、请求方式不同:$.get() 方法使用GET方法来进行异步请求的。$.post() 方法使用POST方法来进行异步请求的。

    2、参数传递方式不同:get请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给Web服务器的,这种传递是对用户不可见的。

    3、数据传输大小不同:get方式传输的数据大小不能超过2KB 而POST要大的多

    4、安全问题: GET 方式请求的数据会被浏览器缓存起来,因此有安全问题。

    66、jQuery的事件委托方法bind 、live、delegate、on之间有什么区别?(常见)

    (1)、bind 【jQuery 1.3之前】

    定义和用法:主要用于给选择到的元素上绑定特定事件类型的监听函数;

    语法:bind(type,[data],function(eventObject));

    特点:

    (1)、适用于页面元素静态绑定。只能给调用它的时候已经存在的元素绑定事件,不能给未来新增的元素绑定事件。

    (2)、当页面加载完的时候,你才可以进行bind(),所以可能产生效率问题。

    实例如下:$( "#members li a" ).bind( "click", function( e ) {} );

    (2)、live 【jQuery 1.3之后】

    定义和用法:主要用于给选择到的元素上绑定特定事件类型的监听函数;

    语法:live(type, [data], fn);

    特点:

    (1)、live方法并没有将监听器绑定到自己(this)身上,而是绑定到了this.context上了。

    (2)、live正是利用了事件委托机制来完成事件的监听处理,把节点的处理委托给了document,新添加的元素不必再绑定一次监听器。

    (3)、使用live()方法但却只能放在直接选择的元素后面,不能在层级比较深,连缀的DOM遍历方法后面使用,即$(“ul”").live...可以,但$("body").find("ul").live...不行; 

    实例如下:$( document ).on( "click", "#members li a", function( e ) {} );

    (3)、delegate 【jQuery 1.4.2中引入】

    定义和用法:将监听事件绑定在就近的父级元素上

    语法:delegate(selector,type,[data],fn)

    特点:

    (1)、选择就近的父级元素,因为事件可以更快的冒泡上去,能够在第一时间进行处理。

    (2)、更精确的小范围使用事件代理,性能优于.live()。可以用在动态添加的元素上。

    实例如下:

    $("#info_table").delegate("td","click",function(){/*显示更多信息*/});

    $("table").find("#info").delegate("td","click",function(){/*显示更多信息*/});

    (4)、on 【1.7版本整合了之前的三种方式的新事件绑定机制】

    定义和用法:将监听事件绑定到指定元素上。

    语法:on(type,[selector],[data],fn)

    实例如下:$("#info_table").on("click","td",function(){/*显示更多信息*/});参数的位置写法与delegate不一样。

    说明:on方法是当前JQuery推荐使用的事件绑定方法,附加只运行一次就删除函数的方法是one()。

     总结:.bind(), .live(), .delegate(),.on()分别对应的相反事件为:.unbind(),.die(), .undelegate(),.off()

    67、px和em的区别(常见)

     

    相同点:px和em都是长度单位;

    异同点:px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,并且em会继承父级元素的字体大小。
    浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。

    68、浏览器的内核分别是什么?

    IE: trident内核

    Firefox:gecko内核

    Safari:webkit内核

    Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核

    Chrome:Blink(基于webkit,Google与Opera Software共同开发)

    69、什么叫优雅降级和渐进增强?(常见)

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

    优雅降级 graceful degradation:
    一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

    区别:

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

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

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

    70、sessionStorage 、localStorage 和 cookie 之间的区别(常见)

     共同点:用于浏览器端存储的缓存数据

    不同点:

    (1)、存储内容是否发送到服务器端:当设置了Cookie后,数据会发送到服务器端,造成一定的宽带浪费;

            web storage,会将数据保存到本地,不会造成宽带浪费;

    (2)、数据存储大小不同:Cookie数据不能超过4K,适用于会话标识;web storage数据存储可以达到5M;

    (3)、数据存储的有效期限不同:cookie只在设置了Cookid过期时间之前一直有效,即使关闭窗口或者浏览器;

            sessionStorage,仅在关闭浏览器之前有效;localStorage,数据存储永久有效;

    (4)、作用域不同:cookie和localStorage是在同源同窗口中都是共享的;sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;

     

    展开全文
  • 白帽子讲WEB安全

    2018-07-17 15:34:54
    白帽子讲WEB安全 白帽子讲WEB安全 白帽子讲WEB安全 白帽子讲WEB安全
  • web应用安全及渗透期末考试复习总结计划.doc
  • b、组件:服务器端用来处理客户端请求的组件,需要在web.xml文件中进行配置。2、Servlet的生命周期,并说出Servlet和CGI的区别?servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束...

    1、什么是Servlet?

    可以从两个方面去看Servlet:

    a、API:有一个接口servlet,它是servlet规范中定义的用来处理客户端请求的程序需要实现的顶级接口。

    b、组件:服务器端用来处理客户端请求的组件,需要在web.xml文件中进行配置。

    2、Servlet的生命周期,并说出Servlet和CGI的区别?

    servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。

    这个生存期由javax.servlet.servlet接口中的init、service、destroy方法表达。

    web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现根据请求的不同调用不同的do**()方法。结束服务,web容器调用servlet的destroy()方法。

    2111b78862de1dcbfbf9c3a90302ab37.png

    区别:

    Servlet处于服务器进程中,它通过多线程运行service()方法,一个实例可以服务于多个请求,并且实例一般不会被销毁;而CGI对每个请求都产生一个新的进程,服务完成后就销毁,所有效率低于Servlet

    3、Servlet接口中有哪些方法?

    Servlet接口定义了5个方法:void init(ServletConfig config) throws ServletException

    void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException

    void destory()

    java.lang.String getServletInfo()

    ServletConfig getServletConfig()

    4、get和post请求的区别?

    a、get是用来从服务器上获取数据,而post是用来向服务器传递数据;

    b、get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者用"?"连接,变量之间用"&"连接;而post是将表单中的数据放在form的数据体中,按照变量与值对应的方式,传递到action所指定的URL。

    c、get是不安全的,因为在传输过程中,数据是被放在请求的URL中;而post的所有操作对用户来说都是不可见的。

    d、get传输的数据量小,这主要应为受url长度限制;而post可以传输大量的数据,所有上传文件只能用post提交。

    e、get限制form表单的数据集必须为ASCII字符;而post支持整个IS01 0646字符集。

    f、get是form表单的默认方法。

    5、什么情况下调用doGet()和doPost()?

    默认情况是调用doGet()方法,JSP页面中的Form表单的method属性设置为post的时候,调用的为doPost()方法;为get的时候,调用deGet()方法。

    6、转发(Forward)和重定向(Redirect)的区别?

    转发是服务器行为,重定向是客户端行为。

    转发(Forword)

    通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的。RequestDispatcher可以通过HttpServletRequest 的getRequestDispatcher()方法获得。例如下面的代码就是跳转到login_success.jsp页面。request.getRequestDispatcher("login_success.jsp").forward(request, response);

    重定向(Redirect) 是利用服务器返回的状态吗来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码。服务器通过HttpServletRequestResponse的setStatus(int status)方法设置状态码。如果服务器返回301或者302,则浏览器会到新的网址重新请求该资源。

    1. 从地址栏显示来说

    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。

    redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL。

    2. 从数据共享来说

    forward:转发页面和转发到的页面可以共享request里面的数据.

    redirect:不能共享数据.

    3. 从运用地方来说

    forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

    redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等

    4. 从效率来说

    forward:高.

    redirect:低.

    7、自动刷新(Refresh)

    自动刷新不仅可以实现一段时间之后自动跳转到另一个页面,还可以实现一段时间之后自动刷新本页面。Servlet中通过HttpServletResponse对象设置Header属性实现自动刷新例如:Response.setHeader("Refresh","1000;URL=http://localhost:8080/servlet/example.htm");

    其中1000为时间,单位为毫秒。URL指定就是要跳转的页面(如果设置自己的路径,就会实现没过一秒自动刷新本页面一次)

    8、Servlet与线程安全

    Servlet不是线程安全的,多线程并发的读写会导致数据不同步的问题。 解决的办法是尽量不要定义name属性,而是要把name变量分别定义在doGet()和doPost()方法内。虽然使用synchronized(name){}语句块可以解决问题,但是会造成线程的等待,不是很科学的办法。

    注意:多线程的并发的读写Servlet类属性会导致数据不同步。但是如果只是并发地读取属性而不写入,则不存在数据不同步的问题。因此Servlet里的只读属性最好定义为final类型的。

    9、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

    JSP是Servlet的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类Servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是java和HTML可以组合成一个扩展名为.jsp的文件。JSP偏重于视图,Servlet偏重于业务逻辑。

    10、JSP工作原理:

    JSP是一种Servlet,但是与HttpServlet的工作方式不太一样。HttpServlet是先由源代码编译为class文件后部署到服务器下,为先编译后部署。而JSP则是先部署后编译。JSP会在客户端第一次请求JSP文件时被编译为HttpJspPage类(接口Servlet的一个子类)。该类会被服务器临时存放在服务器工作目录里面。下面通过实例给大家介绍。

    工程JspLoginDemo下有一个名为login.jsp的Jsp文件,把工程第一次部署到服务器上后访问这个Jsp文件,我们发现这个目录下多了下图这两个东东。

    .class文件便是JSP对应的Servlet。编译完毕后再运行class文件来响应客户端请求。以后客户端访问login.jsp的时候,Tomcat将不再重新编译JSP文件,而是直接调用class文件来响应客户端请求。

    3e745536f60dda018b4377af2394d08b.png

    由于JSP只会在客户端第一次请求的时候被编译 ,因此第一次请求JSP时会感觉比较慢,之后就会感觉快很多。如果把服务器保存的class文件删除,服务器也会重新编译JSP。

    开发Web程序时经常需要修改JSP。Tomcat能够自动检测到JSP程序的改动。如果检测到JSP源代码发生了改动。Tomcat会在下次客户端请求JSP时重新编译JSP,而不需要重启Tomcat。这种自动检测功能是默认开启的,检测改动会消耗少量的时间,在部署Web应用的时候可以在web.xml中将它关掉。

    11、Request对象的主要方法有哪些?setAttribute(String name,Object):设置名字为name的request 的参数值

    getAttribute(String name):返回由name指定的属性值

    getAttributeNames():返回request 对象所有属性的名字集合,结果是一个枚举的实例

    getCookies():返回客户端的所有 Cookie 对象,结果是一个Cookie 数组

    getCharacterEncoding() :返回请求中的字符编码方式 = getContentLength() :返回请求的 Body的长度

    getHeader(String name) :获得HTTP协议定义的文件头信息

    getHeaders(String name) :返回指定名字的request Header 的所有值,结果是一个枚举的实例

    getHeaderNames() :返回所以request Header 的名字,结果是一个枚举的实例

    getInputStream() :返回请求的输入流,用于获得请求中的数据

    getMethod() :获得客户端向服务器端传送数据的方法

    getParameter(String name) :获得客户端传送给服务器端的有 name指定的参数值

    getParameterNames() :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

    getParameterValues(String name):获得有name指定的参数的所有值

    getProtocol():获取客户端向服务器端传送数据所依据的协议名称

    getQueryString() :获得查询字符串

    getRequestURI() :获取发出请求字符串的客户端地址

    getRemoteAddr():获取客户端的 IP 地址

    getRemoteHost() :获取客户端的名字

    getSession([Boolean create]) :返回和请求相关 Session

    getServerName() :获取服务器的名字

    getServletPath():获取客户端所请求的脚本文件的路径

    getServerPort():获取服务器的端口号

    removeAttribute(String name):删除请求中的一个属性

    12、request.getAttribute()和 request.getParameter()有何区别?

    a、request.getParameter()获取的类型是String;request.getAttribute()获取的类型是Object。

    b、request.getPrameter()获取的是POST/GET传递的参数值和URL中的参数;request.getAttribute()获取的是对象容器中的数据值/对象。

    c、request.setAttribute()和request.getAttribute()可以发送、接收对象;request.getParamter()只能接收字符串,官方不开放request.setParamter()(也就是没有这个方法)。

    setAttribute()和getAttribute()的传参原理:

    setAttribute()是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另外一个页面时,应用服务器会把这块内存拷贝到另一个页面所对应的那块内存中。这个就可以通过getAttribute()获取到相应的参数值或者对象。

    13、JSP中动态include和静态include的区别?

    a、静态include:语法:,相当于复制,编辑时将对应的文件包含进来,当内容变化时,不会再一次对其编译,不易维护。

    b、动态include:语法:,能够自动检查被包含文件,当客户端对JSP文件进行请求时,会重新将对应的文件包含进来,进行实时的更新。

    14、JSP有哪些内置对象?作用分别是什么?

    JSP一共有9个内置对象:request:负责得到客户端请求的信息,对应类型:javax.servlet.http.HttpServletRequest

    response:负责向客户端发出响应,对应类型:javax.servlet.http.HttpServletResponse

    session:负责保存同一客户端一次会话过程中的一些信息,对应类型:javax.servlet.http.httpsession

    out:负责管理对客户端的输出,对应类型:javax.serlvet.jsp.jspwriter

    application:表示整个应用环境的信息,对应类型:javax.servlet.servletcontext

    config:表示ServletConfig,对应类型:javax.servlet.servletconfig

    exception:表示页面中发生的异常,可以通过它获得页面异常信息,对应类型:java.lang.exception

    pagecontext:表示这个JSP页面上下文,对应类型:javax.servlet.jsp.pagecontext

    page:表示当前JSP页面本身。

    15、JSP有哪些动作?作用分别是什么?

    JSP一共有以下6中基本动作:JSP:include (当页面被请求的时候引入一个文件)

    JSP:forward (将请求转到另一个页面)

    JSP:useBean (获得JavaBean的一个实例)

    JSP:setProperty (设置JavaBean的属性)

    JSP:getProperty (获得JavaBean的属性)

    JSP:plugin (根据浏览器类型为Java插件生成object或者embed两种标记)

    16、JSP常用指令有哪些?

    page、include、taglib

    a、page指令:定义页面的一些属性。

    常用属性:

    contentType="text/html;charset=utf-8"; 向浏览器端输出数据的编码

    pageEncoding="utf-8"; JSP编译成java文件时所用的编码

    session="true" 是否自动创建session

    b、include指令:引入一个静态的JSP页面

    c、taglib指令:引入一个标签库

    17、讲解JSP中的四种作用域

    JSP中的四种作用域包括page、request、session和application,具体来说:

    a、page是代表一个页面相关的对象和属性。一个页面由一个编译好的java servlet类(可以带有include指令,但不可以带有include动作)表示。这既包括servlet又包括编译成servlet的jsp页面。

    b、request是代表与web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件(由于forware指令和include动作的关系)

    c、session是代表与用于某个web客户机的一个用户体验相关的对象和属性。一个web回话也可以经常跨域多个客户机请求。

    d、application是代表与整个web应用程序相关的对象和属性。这实质上是跨域整个web应用程序,包括多个页面、请求和回话的一个全局作用域。

    18、如何实现JSP或Servlet的单线程模式?

    在JSP中使用page指令进行设置,具体代码如下:

    对于Servlet,可以让自定义的Servlet实现SingleThreadModel标识接口。

    说明:如果将JSP或Servlet设置成单线程工作模式,会导致每个请求创建一个Servlet实例,这种实践将导致严重的性能问题(服务器的内存压力很大,还会导致频繁的垃圾回收),所以通常情况下并不会这么做。

    19、JSP乱码如何解决?

    a、JSP页面乱码:

    b、表单提交时出现乱码:request.setCharacterEncoding("utf-8");

    c、数据库出现乱码:jdbc:mysql://localhost:3306:/user?useSSL=false&useUnicode=true&characterEncoding=utf-8;

    其实我一般的处理的方法就是配置一个过滤器对每个JSP页面进行字符集处理。

    20、实现会话跟踪的技术有哪些?

    1. 使用Cookie

    向客户端发送CookieCookie c =new Cookie("name","value"); //创建Cookie

    c.setMaxAge(60*60*24); //设置最大时效,此处设置的最大时效为一天response.addCookie(c); //把Cookie放入到HTTP响应中

    从客户端读取CookieString name ="name"; Cookie[]cookies =request.getCookies(); if(cookies !=null){

    for(int i= 0;i

    Cookie cookie =cookies[i];

    if(name.equals(cookis.getName()))

    //something is here.

    //you can get the value

    cookie.getValue();

    }}

    优点: 数据可以持久保存,不需要服务器资源,简单,基于文本的Key-Value

    缺点: 大小受到限制,用户可以禁用Cookie功能,由于保存在本地,有一定的安全风险。

    2. URL 重写

    在URL中添加用户会话的信息作为请求的参数,或者将唯一的会话ID添加到URL结尾以标识一个会话。

    优点: 在Cookie被禁用的时候依然可以使用

    缺点: 必须对网站的URL进行编码,所有页面必须动态生成,不能用预先记录下来的URL进行访问。

    3. 隐藏的表单域

    优点: Cookie被禁时可以使用

    缺点: 所有页面必须是表单提交之后的结果。

    4. HttpSession

    在所有会话跟踪技术中,HttpSession对象是最强大也是功能最多的。当一个用户第一次访问某个网站时会自动创建 HttpSession,每个用户可以访问他自己的HttpSession。可以通过HttpServletRequest对象的getSession方 法获得HttpSession,通过HttpSession的setAttribute方法可以将一个值放在HttpSession中,通过调用 HttpSession对象的getAttribute方法,同时传入属性名就可以获取保存在HttpSession中的对象。与上面三种方式不同的 是,HttpSession放在服务器的内存中,因此不要将过大的对象放在里面,即使目前的Servlet容器可以在内存将满时将HttpSession 中的对象移到其他存储设备中,但是这样势必影响性能。添加到HttpSession中的值可以是任意Java对象,这个对象最好实现了 Serializable接口,这样Servlet容器在必要的时候可以将其序列化到文件中,否则在序列化时就会出现异常。

    21、Cookie和Session的的区别?由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。

    思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

    Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。所以,总结一下:Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

    22、什么是Tomcat?

    Tomcat是一种web服务器,java编写的web项目可以部署在上面,用户在客户端请求时,都是将请求发到Tomcat上,Tomcat在将请求发到对应的项目上。

    23、 详细描述MVC

    基于java的web应用系统采用MVC设计模型,即用Model(模型)、View(视图)和Controller(控制)分离设计,这是目前web应用服务系统的主流设置方向。

    Model:处理业务逻辑的模块。

    View:负责页面显示,显示Model的处理结果给用户,主要实现数据到页面的转换过程。

    Controller:负责每个请求的分发,把Form数据传递给Model进行处理,处理完成后,把处理结果返回给相应的View显示给用户。

    展开全文
  • 2020 web前端面试题及答案大全

    万次阅读 多人点赞 2020-05-12 13:43:50
    css相关 1. 万能居中 1.margin: 0 auto;水平 2.text-align: center;水平 3.行高,垂直 4.表格,center,middle;...5.display:table-cell;...7.绝对定位,上下左右全0,margin:auto ...9.IE6,IE7:给父元素设一个font-size...
  • 本篇收录了一些面试中经常会遇到的经典面试以及自己面试过程中遇到的一些问题,并且都给出了我在网上收集的答案。特别在今年,相信很多的前端开发者会有一些跳槽的悸动,通过对本篇知识的整理以及经验的总结,希望...
  • 一、SQL攻击相关复习 请解释什么是SQL注入(SQLi)? 请解释成功的SQL注入攻击的影响? 思考以下场景,一个app的登陆请求页面,正常情况下用户输入账号密码后,SQL会查询SELECT * FROM users WHERE username='yonghu...
  • 2018Web前端面试题及答案大全

    万次阅读 多人点赞 2018-06-22 17:58:48
    HTML&CSS: 对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型、选择器优先级使用、HTML5、CSS3、移动端适应。 JavaScript: 数据类型、面向对象、继承、闭包、插件、作用域、跨域、原型...
  • Web前端笔试115道(带答案及解析)

    万次阅读 多人点赞 2018-07-29 16:25:01
    是为了解决什么安全问题? 网页验证码介绍:”验证码”的英文表示为CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart),翻译过来就是”全自动区分计算机和人类的图灵测试...
  • 2018最新Web前端经典面试试题及答案

    万次阅读 多人点赞 2018-01-16 21:56:43
    本篇收录了一些面试中经常会遇到的经典面试以及自己面试过程中遇到的一些问题,并且都给出了我在网上收集的答案。马上就要过春节了,开年就是崭新的一年,相信很多的前端开发者会有一些跳槽的悸动,通过对本篇知识...
  • 全国大学生软件测试大赛web应用测试预选赛试题及答案试题内容答案 试题内容 答案 注:抖音网站是动态的,控件会发生变化,xpath就会发生变化。所以下面的代码仅供参考。 import org.openqa.selenium...
  • A、合适B、艺术C、一般D、美观根据弃土场工点的地形、地质水文条件,结合沟渠、农田灌溉等设施,应综合考虑弃土场()的设置。A、土工合成材料、固化剂、级配碎石、沥青等原材料运抵现场后,必须进行质量检验,经...
  • 网络安全面试题及答案

    千次阅读 多人点赞 2020-09-17 11:49:14
    防范常见的 Web 攻击 重要协议分布层 arp协议的工作原理 rip协议是什么?rip的工作原理 什么是RARP?工作原理 OSPF协议?OSPF的工作原理 TCP与UDP区别总结 什么是三次握手四次挥手? tcp为什么要三次握手? dns是...
  • WEB程序设计(PHP)》-中国大学mooc-试题题目及答案更多相关问题将考生文件夹下CA1IN\SUN文件夹中的文件夹MOON移动到考生文件夹下LION文件夹中。问:离婚后,子女随男方还是女方生活?()是企业购买货物暂未付款而欠...
  • 2021年最新Web前端面试精选大全及答案

    万次阅读 多人点赞 2021-01-07 11:53:44
    1.网络中使用最多的图片格式有哪些 JPEG,GIF,PNG,最流行的是jpeg格式,可以把文件压缩到最小 在ps以jpeg格式存储时,提供11级压缩级别 2.请简述css盒子模型 一个css盒子从外到内可以分成四个部分:margin...
  • 2021最全面、最详细web前端面试题及答案总结

    万次阅读 多人点赞 2021-02-01 09:34:00
    2021最全面、最详细web前端面试题及答案总结 总结不易,希望可以帮助到即将面试或还在学习中的web前端小伙伴,祝面试顺利,拿高薪! 本章是HTML考点的⾮重难点,因此我们采⽤简略回答的⽅式进⾏撰写,所以不会有太...
  • 《2017年计算机网络技术考试试题及答案》由会员分享,可在线阅读,更多相关《2017年计算机网络技术考试试题及答案(12页珍藏版)》请在人人文库网上搜索。1、2017年计算机网络技术考试试题及答案一. 填空(每空0.5分,...
  • 资源描述学 海 无 涯 第页共35页 1 考试模拟题考试模拟 /////////////////////////////////////////////////// 1. ___ MSIL _______是独立于CPU 的指令集,它可以被高效地转换为特定于某种CPU 的代码. A. CLR B. ...
  • 除了平日的看书之外,做就成了考生巩固知识点的一种重要路径,以下是小编为大家整理的信息安全工程师考试练习试题及答案,希望对大家能有所帮助。1、以下哪种方法可以用于对付数据库的统计推论?(C)A、信息流控制 ...
  • Web前端面试题及答案——HTML&CSS、JS、DOM

    千次阅读 多人点赞 2018-11-19 20:36:59
    (1)布局技巧meta标签 丢弃:无关紧要的div、内联元素(inline)、少用js或flash、没用的绝对定位和浮动样式、不使用100%设置。 使用:HTML5 Doctype和相关指南、重置样式reset.css、一个简单的有语义的...
  • Apsara Clouder云安全专项技能认证:web网络安全考试全录屏,里面可以看到真题,所选答案并不是全对。得分刚好60分,通过考试,发出来仅供参考!侵权即删!
  • 5、JSP 的内置对象方法? 答:request 表示HttpServletRequest 对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header 和session 数据的有用的方法。response 表示HttpServletResponse 对象...
  • 2019最新Web前端经典面试试题及答案,持续更新

    万次阅读 多人点赞 2018-06-08 11:38:18
    2.描述下从输入URL到整个网页加载完毕显示在屏幕上的整个流程 3. 描述一下渐进增强和优雅降级之间的不同 -2018/6/10 1.如何解决跨域问题 2.XML和JSON的区别? 3.快速排序的思想并实现一个快排? -2018/6/16 w...
  • HTML试题及答案

    2021-06-14 05:06:02
    滚动条 13.Web安全色所能够显示的颜色种类为(A )。 A 216 色 B 256 色 C 千万种颜色 D 1500 种色 14.常用的网页图像格式有( )和(C ). A.gif,tiff B.tiff,jpg C.gif,jpg D.tiff,png 15.如果要表单提交信息...
  • 除了平日的看书之外,做就成了考生巩固知识点的一种重要路径,以下是小编为大家整理的信息安全工程师考试练习试题及答案,希望对大家能有所帮助。1、为了应对日益严重的垃圾邮件问题,人们设计和应用了各种垃圾...
  • C#笔试题及答案

    2021-05-20 14:49:45
    C#笔试题及答案发布时间:2021-01-26一个C#的结构体与C++的结构体是相似的,因为它能够包含数据声明和方法.但是,不像C++,C#结构体与类是不同的而且不支持继承.但是,与Java相同的是,一个结构体可以实现接口。下面就由...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,230
精华内容 2,492
关键字:

web安全考试题及答案