笔试题型是:10个选择题、3个算法编程题、1个前端编程题(一共100分钟)
选择题知识点包括有 c基础、html、css、js、http状态码,不能脱离笔试页面。
算法题编程语言限定 Typescript,但是js的语法都能用,可以用IDE。
前端题需要你直接手撸一个选择器,参考ElementUI的创建条目输入选择器版,当然功能和这个还是有很大不同。不能用IDE。
js基础不是很好,思路都是按c语言来的。有啥可以改进的地方,请指大佬在评论区指出就行。
题干
判断字符串是否是回文串,只识别数字和字母(不区分大小写)。
输入样例
'a.bc1 21cb,A'
输出样例
true
分析
1、识别回文串
2、只识别数字和字母
3、不区分大小写
实现代码
// c语言中 大写字母+32==小写字母
// 但是js中无法这样做或者说我不会 单字符与ascii码 的相互转化
// 因为不会大小写转化手撸了一个映射表
const cList={
'a': 'A',
'b': 'B',
'c': 'C',
'd': 'D',
'e': 'E',
'f': 'F',
'g': 'G',
'h': 'H',
'i': 'I',
'j': 'J',
'k': 'K',
'l': 'I',
'm': 'M',
'n': 'N',
'o': 'O',
'p': 'P',
'q': 'Q',
'r': 'R',
's': 'S',
't': 'T',
'u': 'U',
'v': 'V',
'w': 'W',
'x': 'X',
'y': 'Y',
'z': 'Z',
'A': 'A',
'B': 'B',
'C': 'C',
'D': 'D',
'E': 'E',
'F': 'F',
'G': 'G',
'H': 'H',
'I': 'I',
'J': 'J',
'K': 'K',
'L': 'I',
'M': 'M',
'N': 'N',
'O': 'O',
'P': 'P',
'Q': 'Q',
'R': 'R',
'S': 'S',
'T': 'T',
'U': 'U',
'V': 'V',
'W': 'W',
'X': 'X',
'Y': 'Y',
'Z': 'Z',
}
function verify(param){
// write code here
let str=param.match(/[0-9a-zA-Z]+/g).join('')// 正则提取字符和数字再拼接
let l=str.length
for(let i=0;i<l/2;i++){
// 先做大小写判断
if(cList[str[i]] == cList[str[l-i-1]] && cList[str[l-i-1]]!=undefined){
;
}
// 在识别数字
else if(str[i] == str[l-i-1]){
;
}
// 遇到无法匹配项则返回false
else{
return false
}
}
return true
} 第二题 题干
有三个数字数组,求每个数组中的最大值,并将这三个值降序排列作为一个数组返回。
输入样例
[12, 23, 45], [374, 356, 10, 889], [156, 34]
输出样例
[889, 156, 45]
分析
1、先求三个数组的最大值
2、降序排列三个最大值
// 这里图省事和时间就全用sort排序了,为了效率求最大值可以遍历求
function max(a, b, c){
let func = function(a, b){
return b-a
}
a.sort(func)
b.sort(func)
c.sort(func)
return [a[0], b[0], c[0]].sort(func)
} 题干
有一个只包含数字的字符串(length<=12),对其进行3次分割,求其所有可以划分为IP地址的可能,并返回其划分ip地址的数组。
输入样例
'25525511135'
输出样例
['255.255.11.135', '255.255.111.35']
分析
1、先做分割
2、判断分割是否是有效ip
// 发现对每个样例最多只要做3*3*3=27次分割就行了,所以直接暴力
// 本来想用正则 [0-255] 来识别的,但是忘记[]的范围只能0~99之间
// 所以只能自己写个判断
function getIp(str)
{
let time = 0
let list = []
let l = str.length
// 直接暴力分割
for(let i=1;i<4;i++)
{
for(let j=i+1;j<i+4;j++)
{
for(let k=j+1;k<j+4;k++)
{
let a=str.slice(0, i)
let b=str.slice(i, j)
let c=str.slice(j, k)
let d=str.slice(k, l)
if(check(a) && check(b) && check(c) && check(d))
list.push(a+'.'+b+'.'+c+'.'+d)
}
}
}
return list
}
// 判断是否是0~255之间的字符串
function check(s){
let n = parseInt(s)
if(n+'' != s){// 排除前导0的情况
return false
}
if(n>=0 && n<=255){
return true
}
return false
} 反思 第一次笔试,不知道题型和编程语言。所以结果就过了大概7个选择题+2个算法题。肯定是没戏了。做完三个算法题就把时间花完了,没分配时间写前端题了。
最近准备考研了,所以确实心思不在这边了;又因为自学所以基础不牢,很多方法都不会用,比如大小写转化的toUpperCase()和toLowerCase()。考的题基本在LeeCode都有原题只能怪自己花的时间少了。
提醒后面来笔试的前端同学好好刷力扣和牛客的题,还是很有用的。