昨天面试的,有3道题,还问了一些基本问题,说下题目吧。
大数相加
实现2个大正整数相加 function add(a, b)
这里我们用字符串模拟一下相加运算就好了:
let a = '1'
let b = '999'
function add(a, b) {
// 字符串拆成数组
a = a.split('')
b = b.split('')
const alen = a.length
const blen = b.length
const maxLen = Math.max(alen, blen) + 1
// 补0对齐
for (let i = 0; i < maxLen - alen; i++) a.unshift('0')
for (let i = 0; i < maxLen - blen; i++) b.unshift('0')
const res = []
// 模拟加法
for (let i = maxLen - 1; i > 0; i--) {
let sum = Number(a[i]) + Number(b[i])
if (sum > 9) {
sum %= 10
a[i - 1] = String(Number(a[i - 1]) + 1)
}
res.push(sum)
}
if (a[0] !== '0') res.push(a[0])
return res.reverse().join('')
}
console.log(add(a, b))
复制代码
input autocomplete效果
页面内有一个input输入框,实现在数组arr查询命中词和autocomplete效果(类似百度搜索框)
<input id="in" type="text" />
<ul id="ul"></ul>
const arr = ['123', '234', 'cbvg', 'gdcbg', 'kldjfg']
const ul = document.querySelector('#ul')
const input = document.querySelector('#in')
function removeAllChild() {
while (ul.firstChild) {
ul.removeChild(ul.firstChild)
}
}
function assignment() {
input.value = this.innerText
}
function checkedChild(str) {
arr.forEach(v => {
if (v.indexOf(str) !== -1) {
const li = document.createElement('li')
li.appendChild(document.createTextNode(v))
li.addEventListener('click', assignment)
ul.appendChild(li)
}
})
}
input.addEventListener('keyup', e => {
removeAllChild()
checkedChild(input.value)
})
复制代码
拖拽和放下
页面内有一个正方形元素,实现对其拖拽和放下
html,
body {
margin: 0;
}
#demo {
width: 100px;
height: 100px;
background-color: #fcc;
position: relative;
}
#demo:hover {
cursor: move;
}
<div id="demo"></div>
复制代码
//获取元素
var el = document.getElementById('demo')
var x = 0
var y = 0
var l = 0
var t = 0
var isDown = false
//鼠标按下事件
el.onmousedown = function(e) {
//获取x坐标和y坐标
x = e.clientX
y = e.clientY
//获取左部和顶部的偏移量
l = el.offsetLeft
t = el.offsetTop
//开关打开
isDown = true
}
//鼠标移动
window.onmousemove = function(e) {
if (isDown == false) {
return
}
//获取x和y
var nx = e.clientX
var ny = e.clientY
//计算移动后的左偏移量和顶部的偏移量
var nl = nx - (x - l)
var nt = ny - (y - t)
el.style.left = nl + 'px'
el.style.top = nt + 'px'
}
//鼠标抬起事件
el.onmouseup = function() {
//开关关闭
isDown = false
}
复制代码
1题做的还行,2题 3题选一个就好,我2题做出一些,之后还有一些问题,答了大部分,最后还是没过。
总感觉我还是差了一些,但又很难发现差距在哪。要是能多和同届校招的人交流一下就好了,总是自己一个人就容易陷入这种困境。