昨天面試的,有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題做出一些,之後還有一些問題,答了大部分,最後還是沒過。
總感覺我還是差了一些,但又很難發現差距在哪。要是能多和同屆校招的人交流一下就好了,總是自己一個人就容易陷入這種困境。