前面的话
这套题考点包括html/css 、js、跨域问题、计组、计网、数据结构、操作系统、算法、概率论,都比较基础。题目来源牛客。
解析
(1) 变量a是一个64位有符号的整数,初始值用16进制表示为:0Xf000000000000000; 变量b是一个64位有符号的整数,初始值用16进制表示为:0x7FFFFFFFFFFFFFFF。 则a-b的结果用10进制表示为多少?()
A: 1
B:-(2^62+2^61+2^60+1)
C:2^62+2^61+2^60+1
D:2^59+(2^55+2^54+…+2^2+2^1+2^0)
计算机采用补码来存数据,即:
- a的补码: 1111(后面60个0)
- b的补码: 0111(后面60个1),是整数,其原码一样
- -b的补码:1000(后面59个0,最后一个1)
- (a - b)补 = (a补 + (-b)补) = 0111(后面59个0,最后一个1)高位溢出,舍去
- 结果为
2^62+2^61+2^60+1
(2) 下面代码打印结果?
console.log(([])?true:false);
console.log(([]==false?true:false));
console.log(({}==false)?true:false)
-
第一题 Boolean([]) 返回true
布尔类型只有这几个参数返回false:
Boolean(undefined) // false Boolean(null) // false Boolean(0) // false Boolean(NaN) // false Boolean('')// false
-
第二题Number([]) // 0
false转为number类型 0 -
第三题Number({}) // NaN
Number转换类型的参数如果是对象就是NaN
所以结果为true、true、false
(3) 哪些是块级元素
A: input
B: ul
C: hr
D: li
E: div
F: form
- 块级元素有: ul、hr、li、fiv、form(hr是空标签,是一条水平线)
- input是行内替换元素。
(4) 关于跨域问题下面说法正确的是?()
A: 可以利用flash的http请求,来处理跨域问题
B: 通过iframe设置document.domain可以实现跨域
C: 一般情况下,m.toutiao.com可以ajax请求www.toutiao.com域名下的接口并获得响应
D: 通过jsonp方式可以发出post请求其他域名下的接口
- flash不能解决跨域问题
- document.domain:这种方式用在主域名相同子域名不同的跨域中
- 域名不同的情况下不可以是ajax
- jsonp: 利用
<script>
标签解决跨域,但是只支持GET请求。
(5) 以下符合 ES6 写法的有:()
A:
class Foo
{
constructor() {return Object.create(null);}
}
Foo()
B:
var m=1;
export m;
C:
export var firstName=’Michael’;
D: 在A模块中export{readFile}后,在B模块中import readFile from ‘A’可以获取到readFile
- Foo(),将class当为普通方法,new Foo()才正确
- export m,m要加{}
- 正确,使用var或者let不需要{}
- readFile要加{}
(6) http 请求方式 get 和 post 的区别包括()
A: get和post的可传输内容大小不一样,一个有限制一个没有限制
B: get和post传输的内容存放的位置不一样,一个放在header,一个放在body
C: get请求Content-type只能是text/html
D: get请求可以跨域、post请求不能跨域
- 首先说明一点: GET与POST的表现不同,是由于浏览器与服务器限制导致的。其本质: HTTP协议是基于TCP/IP的应用层协议,而GET与POST是HTTP协议上的两种请求方式,所以无论是GET还是POST,都是基于TCP连接,用的都是同一个传输层的协议,在传输上没有区别。
- 由于浏览器与服务器的限制:get将参数放在header的url上(长度有限制),post将参数放在body中(长度无限制)
- get请求Content-type除了text/html还有其他
- get请求可以跨域、post请求也能跨域
(7) 下面哪些属于JavaScript的typeof运算符的可能结果:()
A:symbol
B:NaN
C: boolean
D: null
E:array
F: undefined
G:string
typeof运算符的结果只有6种:undefined、Object、symbol、boolean、string、number
(8) TCP断开连接的四次挥手中,第四次挥手发送的包会包含的标记,最正确的描述是?()
A: FIN
B: FIN,PSH
C: ACK
D: FIN,ACK
(9) 假设 a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,则线程 1 和线程 2 同时执行下面的代码,最终 a 的结果不可能是()
boolean isOdd = false;
for(int i=1;i<=2;++i)
{
if(i%2==1)isOdd = true;
else isOdd = false;
a+=i*(isOdd?1:-1);
}
A:-1
B:-2
C:0
D:1
两个线程对a的操作都是1或-2,共有四种情况:
- 如果线程A循环两次之后,结果为-1;此时如果该结果线程B是可见的,再执行循环结果就是-2
- 如果线程A循环两次之后,结果为-1;此时如果该结果线程B不可见,再执行循环还是从a=0开始,则结果为-1;无论A和B谁的结果被最后刷新到内存,结果都是-1
- 如果线程A做了+1的操作,该结果立即被B看到,B开始执行两次循环+1和-2。如果B的结果晚于A计算的结果刷新到内存中,那么结果就是0.
- 如果线程A线程B同时做了+1操作,线程A做-2操作,a = -1; 线程B将这个结果带入-2操作,a的最终结果为-3。
(10) 使用HTML+CSS实现如图布局,border-width:5px,格子大小是50px*50px,hover时边框变成红色,需要考虑语义化。
<style>
.container{
width: 170px;
height: 170px;
}
.box {
width: 50px;
height: 50px;
line-height: 50px;
border: 5px solid blue;
text-align: center;
float: left;
/* z-index只对定位的元素有效 */
position: relative;
}
.box:hover{
cursor: pointer;
/* 将边框的层级增大*/
z-index: 999;
border-color: red;
}
.box2,.box3,.box5,.box6,.box8,.box9 {
margin-left: -5px;
}
.box4,.box5,.box6,.box7,.box8,.box9 {
margin-top: -5px;
}
</style>
<body>
<div
class="container">
<div class="box1 box">1</div>
<div class="box2 box">2</div>
<div class="box3 box">3</div>
<div class="box4 box">4</div>
<div class="box5 box">5</div>
<div class="box6 box">6</div>
<div class="box7 box">7</div>
<div class="box8 box">8</div>
<div class="box9 box">9</div>
</div>
</body>
(11) 给出一个上传文件时不用刷新页面的方案,要求写出关键部分的js代码。
-
使用ajax来实现部分刷新功能:
<input type="file" id="file"/> <button id="upload">点击上传</button> var xmlHttp = new XMLHttpRequest(); xmlHttp.open("POST", url, true); xml.onreadystatechange = function () { if(xmlHttp.readyState === 4 && xmlHttp.status === 200) { // xxx }else{ alert("Ajax服务器返回错误") } } xmlHttp.send(file.value);
-
使用fetch实现
<input id="upload" type="file" /> <button id="upload-btn"> upload </button> <script> document.getElementById('upload-btn').onclick = function(){ var input = document.getElementById('upload'); //选取文件; var file = input.files[0]; //创建表单数据对象; var formData = new FormData(); //将文件添加到表单对象中; formData.append('file',file); //传输; fetch({ url:'', mothod:'POST', body:formData }) .then((d)=>{ console.log('result is',d); }) } </script>
-
使用axios实现
<input id="upload" type="file" /> <button id="upload-btn"> upload </button> <script src="https://unpkg.com/axios/dist/axios.min.js"> var file = document.getElementById("unload").files[0] var formData = new FormData(); formData.append('file',file); axios.post('/',{formData}) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); }); </script>