java搜狐笔试题_记录一次搜狐面试(包括笔试题)
1.如何用一个div实现下图
css
#demo{
width:120px;
height: 120px;
border:2px solid #333;
border-radius: 20px;
position:relative;
}
#demo:before,#demo:after{
content: "";
width: 60px;
height: 60px;
position: absolute;
left: 50%;
top: 50%;
}
#demo:before{
margin-left: -30px;
border-top: 2px solid;
}
#demo:after{
margin-top: -30px;
border-left: 2px solid;
}
html
类似这样用伪类实现图形的题目还有很多,分享两个:
用纯CSS实现一个带三角的正方形 仅用一个div
https://blog.csdn.net/hahahah...
CSS实现太极图(1个DIV实现)
https://www.cnblogs.com/web12...
2.如何实现①平行四边形 ②三角形
① 平行四边形
css
div {
width:100px;
height:100px;
border: 2px solid #333;
color: #333;
transform: skew(-20deg);
}
html
运行结果:
②三角形
css
div{
width: 0;
height: 0;
border: 10px solid transparent;
border-top-style: #333;
}
html
运行结果:
3.请写出下列alert的结果
alert(typeof null) //object
alert(typeof undefined) //undefined
alert(typeof NaN) //number
alert(NaN == undefined) //false
alert(NaN ==NaN) //false
var str="123abc"
alert(typeof str++)//number
alert(str)//NaN
4.已知有数组 [[1,2,2],[3,4,5,5],[6,7,8,9,[11,12,[12,13,[14]]]],10],扁平化数组后应该得到的数组为:[1,2,2,3,4,5,5,6,7,8,9,11,12,12,13,14,10],请写出实现扁平化额代码。
第一种方法:
var arr=[[1,2,2],[3,4,5,5],[6,7,8,9,[11,12,[12,13,[14]]]],10]
function Flat1(arr){
var newArr =[];
for(var i= 0; i < arr.length; i++){
if(arr[i] instanceof Array){
newArr = newArr.concat(Flat1(arr[i]));
// newArr.push.apply(newArr, Flat1(arr[i]));
}else{
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(Flat1(arr))
第二种方法:(es6的方法)
var arr=[[1,2,2],[3,4,5,5],[6,7,8,9,[11,12,[12,13,[14]]]],10]
const Flat2 = arr => arr.reduce((a, b) => a.concat(Array.isArray(b) ?
Flat2(b) : b), []);
console.log(Flat2(arr))
对应es5的代码
var arr=[[1,2,2],[3,4,5,5],[6,7,8,9,[11,12,[12,13,[14]]]],10]
var Flat3 = function (arr){
return arr.reduce(function(a,b){
return a.concat(Array.isArray(b)? Flat3(b):b)
},[]);
}
console.log(Flat3(arr))
5.写出下列代码执行结果:
async function async1(){
console.log('async1 start')
await async2()
console.log('async1 end')
}
async function async2(){
console.log('async2')
}
console.log('script start')
setTimeout(function(){
console.log('setTimeout')
},0)
async1();
new Promise(function(resolve){
console.log('promise1')
resolve();
}).then(function(){
console.log('promise2')
})
console.log('script end')
运行结果:
script start
async1 start
async2
promise1
script end
promise2
async1 end
setTimeout
类似题目修改:
async function async1(){
console.log('async1 start')
await async2()
console.log('async1 end')
}
function async2(){ // 去掉了 async 关键字
console.log('async2')
}
console.log('script start')
setTimeout(function(){
console.log('setTimeout')
},0)
async1();
new Promise(function(resolve){
console.log('promise1')
resolve();
}).then(function(){
console.log('promise2')
})
console.log('script end')
运行结果:
script start
async1 start
async2
promise1
script end
async1 end
promise2
setTimeout
6.写出能够将http://www.sohu.com/a/2830163...{code:aaa,_f:index_cpc_0}的函数
function parseObject(url){
var obj = {};
if(url.indexOf('?')!==-1){
var url = url.substring(url.indexOf('?')+1);
}else{
return ;
}
var arr = url.split('&');
arr.forEach(function(val){
var brr = val.split('=');
obj[brr[0]] = brr[1];
});
return obj;
}
var url="http://www.sohu.com/a/283016366_267106?code=aaa&_f=index_cpc_0"
parseObject(url)
7.tcp/ip协议
TCP/IP 是一类协议系统,它是用于网络通信的一套协议集合.
传统上来说 TCP/IP 被认为是一个四层协议
1) 网络接口层:
主要是指物理层次的一些接口,比如电缆等.
2) 网络层:
提供独立于硬件的逻辑寻址,实现物理地址与逻辑地址的转换.
在 TCP / IP 协议族中,网络层协议包括 IP 协议(网际协议),ICMP 协议( Internet 互联网控制报文协议),以及 IGMP 协议( Internet 组管理协议).
3) 传输层:
为网络提供了流量控制,错误控制和确认服务.
在 TCP / IP 协议族中有两个互不相同的传输协议: TCP(传输控制协议)和 UDP(用户数据报协议).
4) 应用层:
为网络排错,文件传输,远程控制和 Internet 操作提供具体的应用程序
8.关于缓存
1. 前端缓存概述
前端缓存主要是分为HTTP缓存和浏览器缓存。其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务器代码上设置;而浏览器缓存则主要由前端开发在前端js上进行设置。下面会分别具体描述。
2. 前端缓存分类
2.1 HTTP缓存
从HTTP协议开始说起
由于整个网络服务都是基于http协议 的,因此先来介绍一下HTTP协议当中定义的缓存机制。HTTP协议主要是通过请求头当中的一些字段来和服务器进行通信,从而采用不同的缓存策略。
一般来说,对于一个完整的HTTP GET请求缓存过程会包含七个主要的步骤:①从接收网络请求开始,②客户端会读取请求报文并且对报文进行解析, 进而提取URL和各种首部,③然后将会查询是否在本地有副本,如果本地没有副本就会从服务器上获取一份副本并且保存在本地。④接着会进行查看副本是否足够新鲜(新鲜度检测), 如果缓存已经失效就会询问服务器是否有任何更新,⑤服务器就会用新的首部和已缓存的主体来构建一条响应报文,⑥最后发送给客户端。⑦根据服务器的不同,会可选地选择创建日志记录该过程。
整体流程:HTTP缓存都是从第二次请求开始的。
第一次请求资源时,服务器返回资源,并在respone header头中回传资源的缓存参数;第二次请求时,浏览器判断这些请求参数,击中强缓存就直接200,否则就把请求参数加到request header头中传给服务器,看是否击中协商缓存,击中则返回304,否则服务器会返回新的资源。
HTTP缓存分为强缓存和协议缓存,它们的区别如下:
200 from disk or 200 from memory :
强缓存的200也有两种情况:200 from disk和200 from memory。现在我没有找到明确的文档来描述这种区别的发生条件。https://www.zhihu.com/questio... 这个问题知乎中提到了一些情景,可以自行取用。
2.1.1 强缓存
2.1.2 协商缓存
协商缓存都是成对出现的。
2.1.3 最佳优化策略-消灭304
最佳优化策略:因为协商缓存本身也有http请求的损耗,所以最佳优化策略是要尽可能的将静态文件存储为较长的时间,多利用强缓存而不是协商缓存,即消灭304。
但是给文件设置一个很长的Cacha-Control也会带来其他的问题,最主要的问题是静态内容更新时,用户不能及时获得更新的内容。这时候就要使用hash的方法对文件进行命名,通过每次更新不同的静态文件名来消除强缓存的影响。
2.2 浏览器缓存
2.2.1 本地存储小容量
Cookie主要用于用户信息的存储,Cookie的内容可以自动在请求的时候被传递给服务器。
LocalStorage的数据将一直保存在浏览器内,直到用户清除浏览器缓存数据为止。
SessionStorage的其他属性同LocalStorage,只不过它的生命周期同标签页的生命周期,当标签页被关闭时,SessionStorage也会被清除。
2.2.2 本地存储大容量
WebSql和IndexDB主要用在前端有大容量存储需求的页面上,例如,在线编辑浏览器或者网页邮箱。
2.2.3 应用缓存与PWA
应用缓存全称为Offline Web Application,它的缓存内容被存在浏览器的Application Cache中。它也是一个被W3C标准废弃的功能,主要是通过manifest文件来标注要被缓存的静态文件清单。但是在缓存静态文件的同时,也会默认缓存html文件。这导致页面的更新只能通过manifest文件中的版本号来决定。而且,即使我们更新了version,用户的第一次访问还是会访问到老的页面,只有下一次再访问才能访问到新的页面。所以,应用缓存只适合那种常年不变化的静态网站。如此的不方便,也是被废弃的重要原因。
PWA全称是渐进式网络应用,主要目标是实现web网站的APP式功能和展示。尽管PWA也有manifest文件,但是与应用缓存却完全不同。不同于manifest简单的将文件通过是否缓存进行分类,PWA用manifest构建了自己的APP骨架。另外,PWA用Service Worker来控制缓存的使用。这一块的内容较多,在这里就不详细展开了。
2.2.4 往返缓存
往返缓存又称为BFCache,是浏览器在前进后退按钮上为了提升历史页面的渲染速度的一种策略。BFCache会缓存所有的DOM结构,但是问题在于,一些页面开始时进行的上报或者请求可能会被影响。这个问题现在主要会出现在微信h5的开发中。
原文:http://web.jobbole.com/95057/
java搜狐笔试题_记录一次搜狐面试(包括笔试题)相关推荐
- 招银网络科技java春招二面_招银网络科技 2019春招笔试题复盘
因本人刚开始写博客,学识经验有限,如有不正之处望读者指正,不胜感激:也望借此平台留下学习笔记以温故而知新.这篇博客是复盘回忆招银网络科技2019春招的笔试试题类型,相关岗位:算法工程师. 简要介绍:时 ...
- java大小端字节流解析_记录一个如何解决java与C++socket通信的大小端问题
问题背景 oracle jdk默认的socket通信发送int类型数据高位优先.下面是jdk包内部相关源码.(模拟) os.write((len >>> 24) & 0xFF ...
- java导出word文件损坏_记录一次POI导出word文件的细节问题
首先百科一下POI是什么: Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能.通过字面意思,我们大概知 ...
- java 内存泄露对象排查_记录一次 java内存泄漏的排查
1.问题:jar进程会随着时间由 30% 上涨到 70% 直到虚机报警.重启过后,还是会缓慢上涨: 进程数也在上涨: 2.在排查内存问题时,可能会使用的命令 1)查看 java 进程:jps -l 可 ...
- python实习生面试题_【实习】暑期实习之python笔试题(一)
近期忙于找一个暑期实习的公司,无奈个人水平实在太水,合适的公司也不是很多,笔试题目也积累了一些,整理一下好了. 公司 A 题目一:编写一个脚本main.py,使用方式如下: main.py -u ht ...
- java io bio nio面试题_漫画:一文学会面试中常问的 IO 问题!
原标题:漫画:一文学会面试中常问的 IO 问题! 作者 | 漫话编程 责编 | 伍杏玲 本文经授权转载自漫话编程(ID:mhcoding) 周末午后,在家里面进行电话面试,我问了面试者几个关于IO的问 ...
- java获取磁盘读取速度_记录屏幕Java磁盘速度
您可能要考虑的一种选择是对多个线程进行处理.一个线程可以专用于截屏,而其他许多线程可以写入磁盘.由于写入磁盘不是占用大量CPU的操作,因此您可以让它们中的许多并发运行,每个写入一个不同的文件.以下程序 ...
- 字节跳动python面试题_字节跳动2019两道春招笔试题python解法
(一)万万没想到之聪明的编辑 我叫王大锤,是一家出版社的编辑.我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误.但是,优秀的人总能在平凡的工作中发现真理.我发现一个发现拼 ...
- java实现12306接口查询_记录一次调用12306查询。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我创建了一个 city 矢实体类 /** * User实体类 * @author Administrator * */ public class City ...
最新文章
- QT:(4)解决在VS15下配置QT后没有QT GUI Application选项
- Redis将继续采用BSD许可证
- 初识ABP vNext(2):ABP启动模板
- 【Python】PyCharm中Matplotlib绘图不能显示UI效果的问题解决
- 如何在JS中应用正则表达式
- C++中的继承(派生)的一些误区
- 使用ListBox控件来实现直方图控件(一)
- 给radio添加点击事件
- iftables 官方文档
- 【生活日记】 路在脚下,更在心中,心随路转,心路常宽
- vue 之 render函数 封装 input组件
- selector wakeup
- 运行LIO-SAM踩坑问题
- OSChina 周二乱弹 ——泰迪的国度
- 如何正确理解SEO优化与搜索引擎优化之间的关系
- C语言书籍阅读-读书笔记--高质量程序设计指南》--C/C++,林锐
- ImportError: DLL load failed while importing win32api
- java中 访问修饰符限制性最高的是,问:JAVA中,访问修饰符限制性最高的是( )。(选择一项)...
- AE-新知识-关于快捷键“U”和“S”
- ZBrush 4R8将于6月30停止预售,官方:预售期内8折优惠,你还在犹豫?