笔试题目一共有20道,主要有选择题,简答题以及编程题,但是大部分都是简答题,题干是全英语的,但是大致题意还是能够读懂。考查知识大体涉及JavaScript、HTTP、CSS、MySQL等。
1.js里面=,== ,===的区别?(简答)
=:赋值
= = :判断两个数是否相等
= = =:用来检测两个操作数是否严格相等
其中 = = 是用于一般比较, 但是 = = =是用于严格比较,==在比较的时候可以转换数据类型,而 === 是严格比较,只要类型不匹配就返回flase
补充:
“===”首先计算其操作数的值,然后比较这两个值,比较过程没有任何类型转换
1、如果两个值类型不相同,则它们不相等。
2、如果两个值都是null或者都是undefined,则它们不相等。
3、如果两个值都是布尔值true或false,则它们相等。
4、如果其中一个值是NaN,或者两个两个值都是NaN,则它们不相等。NaN和其他任何值都是不相等的,包括它本身!所以通过x!==x来判断x是否为NaN,只有在x为NaN的时候,这个表达式的值才为true。
5、如果两个值为数字,且数值相等,则它们相等。如果一个为0,另一个为-0,则它们同样相等。
6、如果两个引用值同一个对象、数组或函数,则它们是相等的。如果指向不同的对象,则它们是不等的。尽管两个对象具有完全一样的属性。
举例说明:
1.“1” == true类型不同,"=="将先做类型转换,把true转换为1,即为 “1” == 1;此时,类型仍不同,继续进行类型转换,把"1"转换为1,即为 1 == 1。
如果比较:“1” === true 左侧为字符型,右侧为bool布尔型或int数值型,左右两侧类型不同,结果为false;
2.如果比较: 1 === 1 左侧为int数值型,右侧为int数值型,左右两侧类型相同,数值大小也相同,结果为true; 1 === 2 左侧为int数值型,右侧为int数值型,左右两侧类型相同,但数值大小不同,结果为false。
2.js里面undefined和null区别?
一个没有被赋值的变量的类型是undefined,如果方法或者是语句中操作的变量没有被赋值,则会返回undefined。
null值表示一个指向不存在或无效的对象或地址引用,可以通过将变量的值设置为 null 来清空变量。
补充:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
(5)null == undefined 返回true
(6)null === undefined 返回false (值相同,但类型不同)
3.js脚本有哪一个引擎执行(js由什么执行)?(选择题,其他选择忘记了)
A. JavaScript引擎是一个专门处理JavaScript脚本的虚拟机,一般会附带在网页浏览器中,用于解析和执行JavaScript脚本 对
B. Web Server 错
补充:
js引擎就是能够读懂JavaScript代码,并准确地给出代码运行结果的一段程序。对于静态语言(Java、C++、C),处理上述事情的叫编译器,相应地对于JavaScript这样的动态语言则叫做解释器。区别:编译器是将源代码编译为另外一种代码(比如机器码或者字节码),而解释器是直接解析并将代码运行结果输出,比如firebug的console就是一个JavaScript解释器。
V8引擎,为了提高JS的运行性能,在运行之前会将JS编译为本地的机器码,然后再去执行机器码。底层采用C/C++编写。
4.json的正确格式?(选择题)
A. {
“name”: “pitt”
“age”: 10
}
B. {
name: “pitt”
age: 10
}
C. [
name: “pitt”
age: 10
]
正确答案:A
5.写出下面代码的结果?
var a1=[1,2];
var a2=a1;
a1[0]=a2[1];
a2.push(3);
console.log(a1);
console.log(a2) ;
结果:
2,2,3
2,2,3
补充:
ECMAScript中所有函数的参数都是按值传递的,所有函数的参数都是按值传递的,也就是说把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。
js的参数传递:https://zhuanlan.zhihu.com/p/40261600
补充
6.什么是版本控制?(简单题)
版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。
补充:
Git 属于分布式版本控制系统,而 SVN 属于集中式。
集中式版本控制只有中心服务器拥有一份代码,而分布式版本控制每个人的电脑上就有一份完整的代码。
集中式版本控制有安全性问题,当中心服务器挂了所有人都没办法工作了。
集中式版本控制需要连网才能工作,如果网速过慢,那么提交一个文件会慢的无法让人忍受。而分布式版本控制不需要连网就能工作。
分布式版本控制新建分支、合并分支操作速度非常快,而集中式版本控制新建一个分支相当于复制一份完整代码。
7.MySQL里面FLOAT、DOUBLE、DECIMAL区别?(简答题)
float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decimal是定点型;
MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。
FLOAT和DOUBLE在不指 定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0。
转至MySQL类型float double decimal的区别 :https://www.cnblogs.com/gulibao/p/5416245.html
8.What is the good code? (简答题)
我就简单答了算法巧妙正确,便于扩展,便于移植,书写规范好阅读(有合适的注释)。
9.On executing the DELETE statement in MySQL ,I keep getting the error about ‘foreign key constraint failing’,What do I do? (简答题)
(在MySQL中执行DELETE语句时,我不断得到“外键约束失败”的错误,怎么办?)
1.禁用外键约束:SETFOREIGN_KEY_CHECKS=0;
2.然后再删除数据
3.启动外键约束:SETFOREIGN_KEY_CHECKS=1;
查看当前FOREIGN_KEY_CHECKS的值,可用如下命令:
SELECT @@FOREIGN_KEY_CHECKS;
10.How would you write a sql query to select all teams that won 2,4,6,8 games?
(写出查询表teamresults,满足赢得2、4、6、8场比赛的球队信息)
表名为teamresults,表结构如下
id |
---|
team_name |
game_won |
查询:
SELECT * FROM tablename WHERE game_won IN (2,4,6,8)
11.What does the query means:(下面sql语句的作用?)
SELECT user_name user_ip FROM users LEFT JOIN ip USING(user_id)
做连接查询:
USING等价于JOIN 操作中的ON,ip表和users表根据user_id字段关联,那么以下等价
SELECT user_name user_ip FROM users LEFT JOIN ON ip.user_id=users.user_id
查询表users的user_name、user_ip字段连接ip表的字段
12.The structure of the table buyers is as follows
The values of user_pri_id in the last row is 2345. If we delete all rows and insert a new row then :
What is the starting value for this auto incremented feild user_pri_id ?
(大致意思就是:最后一行中的user_pri_id的值是2345。如果删除所有行并插入新行,那么这个自增user_pri_id的初始值是多少?)
结果:2456
在删除全部行后插入新行ID如何再从1开始 使用 truncate table tablename
使用delete,表上索引占用空间不会变;
使用truncate table tablename,表与表上索引的空间占用均回到建立索引或表时的initial参数。
13.同步提交代码到版本控制系统中的步骤?(简答)
考虑git的提交步骤
14.表单提交数据时GET和POST的区别?
1.GET是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。POST是通过HTTP POST机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
2.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
3.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
4.get安全性非常低,post安全性较高。
15.Cookie,LocalStorage ,SessionStorage是什么及区别?
Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。由于之后每次请求都会需要携带 Cookie 数据,因此会带来额外的性能开销(尤其是在移动环境下)。
SessionStorage 针对一个 session 的数据存储,当用户关闭浏览器窗口后,数据会被删除。
LocalStorage 方法存储的数据没有时间限制。第二天、第二周或下一年之后,数据依然可用。
HTML5 提供了两种在客户端存储数据的新方法:
localStorage - 没有时间限制的数据存储
sessionStorage - 针对一个 session 的数据存储
之前,这些都是由 cookie 完成的。但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效率也不高。
在 HTML5 中,数据不是由每个服务器请求传递的,而是只有在请求时使用数据。它使在不影响网站性能的情况下存储大量数据成为可能。
16.HTTP请求状态码有哪些及代表意义?
100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。
200 OK
301 Moved Permanently :永久性重定向
302 Found :临时性重定向
400 Bad Request :请求报文中存在语法错误。
401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。
403 Forbidden :请求被拒绝。
404 Not Found
500 Internal Server Error :服务器正在执行请求时发生错误。
503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
17.写出程序展示下面的效果:(杨辉三角)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
代码:
public static void main(String[] args) {
int row = 6;
for (int i = 1; i <= row; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(num(i, j) + " ");
}
System.out.println();
}
}
public static int num(int x, int y) {
if (y == 1 || y == x) {//判断是否到达边界,边界返回1
return 1;
}
int c = num(x - 1, y - 1) + num(x - 1, y);
return c;
}
18.实现大整数相加,有两个很大很大的数,以至于不能用整形数据表示,只能用字符串来表示,假如d1=3141426709752318,d2=3141426709752318,求解相加结果。
思路:
第一步,把整数倒序存储,整数的个位存于数组0下标位置,最高位存于数组长度-1下标位置。之所以倒序存储,更加符合我们从左到右访问数组的习惯。
第二步,创建结果数组,结果数组的最大长度是较大整数的位数+1,原因很明显。
第三步,遍历两个数组,从左到右按照对应下标把元素两两相加,就像小学生计算竖式一样。
public static void main(String[] args) {
String d1="3141426709752318";
String d2="231426709734985";
String res=getNumberSum(d1, d2);
System.out.println(res);
}
public static String getNumberSum(String bigNumberA, String bigNumberB) {
//两个大整数字符串用数组逆序存储,数组长度等于较大整数位数+1
int maxLength = bigNumberA.length() > bigNumberB.length() ? bigNumberA.length() : bigNumberB.length();
int[] arrayA = new int[maxLength + 1];
for (int i = 0; i < bigNumberA.length(); i++) {
arrayA[i] = bigNumberA.charAt(bigNumberA.length() - 1 - i) - '0';
}
int[] arrayB = new int[maxLength + 1];
for (int i = 0; i < bigNumberB.length(); i++) {
arrayB[i] = bigNumberB.charAt(bigNumberB.length() - 1 - i) - '0';
}
// 构建result数组,数组长度等于较大整数位数+1
int[] result = new int[maxLength + 1];
// 遍历数组,按位相加
for (int i = 0; i < result.length; i++) {
int temp = result[i];
temp += arrayA[i];
temp += arrayB[i];
// 判断是否进位
if (temp >= 10) {
temp = temp - 10;
result[i + 1] = 1;
}
result[i] = temp;
}
// 把result数组再次逆序并转成String
StringBuilder sb = new StringBuilder();
// 是否找到大整数的最高有效位
boolean findFirst = false;
for (int i = result.length - 1; i >= 0; i--) {
if (!findFirst) {
if (result[i] == 0) {
continue;
}
findFirst = true;
}
sb.append(result[i]);
}
return sb.toString();
}
19.There are 10,000,000 integers,all of them are random from 0 to 100, Please write a function to calculate the occurrence times of each of the random numbers?
(假如一个数组里面一共10000000个数,它们都是从0到100的随机值,请写一个函数来计算每个随机数的出现次数)
思路:计数排序
public static void main(String[] args) {
int nums10000000[]=new int [10000000];
//假如这10000000被填充了值了。
int []res=countSort(nums10000000);
}
//0-100
public static int[] countSort(int[] array) {
// 1.得到数列的最大值
int max =100;
// 2.根据数列最大值确定统计数组的长度
int[] countArray = new int[max + 1];//101
// 3.遍历数列,填充统计数组
for (int i = 0; i < array.length; i++) {
countArray[array[i]]++;
}
// 4.遍历统计数组,输出结果
int index = 0;
int[] sortedArray = new int[array.length];
for (int i = 0; i < countArray.length; i++) {
for (int j = 0; j < countArray[i]; j++) {
sortedArray[index++] = i;
}
}
return sortedArray;
}
20.时间不够,暂时没有看到题目。