yuadhのinterview_note yuadhのinterview_note
前端基础
软件框架
算法|数据结构
基础学科
系统|工具
项目
面试综合
专栏
GitHub (opens new window)
前端基础
软件框架
算法|数据结构
基础学科
系统|工具
项目
面试综合
专栏
GitHub (opens new window)
  • 字节前端青训营

    • 青训营真题day01
      • 青训营真题
        • 题目一:
        • 题目二:
        • 题目三:
        • 题目四:
      • 选择题
    • day03-ts
    • day04-HTTP
  • blog

  • 面试综合
  • 字节前端青训营
yuadh
2023-02-07
目录

青训营真题day01

# 青训营真题

# 题目一:

给定一个十进制整数字符串,判断它是否是 2 的幂。

示例 1 输入:"16",输出:true

示例 2 输入:"101",输出:false

示例 3 输入:"70368744177664",输出:true

限定语言:C、 C++、Java、Python、JavaScript V8

一个数n是2的幂,当且仅当n是正整数,并且n的二进制中包含1个1,因此我们可以考虑使用位运算,将n的二进制表示中最低位的哪个1提取出来,再判断剩余的数值是否为0即可。

  • n&(n-1)=0
  • n&(-n)=n

负数的存储在计算机中按补码规则存储,按位取反后加一, n&(-n) 的结果为 n 时为 2 的幂

4(100) 16(1 0000)

let isPowerOfTwo = function(n){
  return n>0&&(n&(n-1))===0
}
1
2
3
let isPowerOfTwo = function(n){
  return n>0&&(n&-n)===n
}
1
2
3

如果是给定范围的一个数判断

  • -2^31 <= n <= 2^31 - 1

只需要判断 n 是否是 2^30 的约数即可

let isPowerOfTwo = function(n){
  const BIG = 1<<30
  return n>0&&BIG%n === 0
}
1
2
3
4

自己的题解

var isPowerOfTwo = function(n) {
    if(n<1){
        return false
    }
    while(n>1){
        if(n%2){
            return false
        }
        n/=2
    }
    return true
};
1
2
3
4
5
6
7
8
9
10
11
12

扩展题:

幂为4

方法一:

如果n是4的幂,那么该数也是2的幂且二进制中的1出现在偶数个二进制位上

可以构造一个 mask 整数 ,*mask*=(10101010101010101010101010101010)2

与 n 进行与运算,结果为0表示该数为 4 的幂

let isPowerOfFour = function(n) {
    return n > 0 && (n & (n - 1)) === 0 && (n & 0xaaaaaaaa) === 0;
};
1
2
3

方法二:取模

let isPowerOfFour = function(n) {
    return n > 0 && (n & (n - 1)) === 0 && n % 3 === 1;
};
1
2
3

4的幂,除3取模一定为1

总结:

该题型关键解法,在于找到 n&(n-1)=0 的类似规律

# 题目二:

题目 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略空格、字母的大小写。

示例 输入:"A man, a plan, a canal: Panama",输出:true

限定语言:C、 C++、Java、Python、JavaScript V8

该类题型解法: 直接使用 reverse()自带回文函数、双指针、栈等

此题,首先需要先去除非字母和数字的字符,后将字母全部转化为小写后进行判断

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
  let len = s.length
  let left = 0 , right = len-1
  s = s.toLowerCase()
  while(left<right){
    if(!isVail(s[left])){
       left++
       continue
    }else if(!isVail(s[right])){
       right--
       continue
    }
    if(s[left]==s[right]){
       left++
       right--
       continue
    }
   	return false
  } 
  return true
};

let isVail = function(c){
  if(c>='a'&&c<='z'){
     return true
  }
  if(c>='0'&&c<='9'){
     return true
  }
  return false
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

自己题解

力扣上更简洁的写法

var isPalindrome = function(s) {
   s=s.replace(/[^a-zA-Z0-9]/g,"").replace(/\s/g,"").toLowerCase();
    let i=0,j=s.length-1;
    while(i<j){
        if(s[i]!=s[j]){
           return false;
        }
        i++;
        j--;
    }
return true;
};
1
2
3
4
5
6
7
8
9
10
11
12

注意:

如果使用 reverse() 函数,会改变原有数组,使用 toString() 进行比较

# 题目三:

给你一个字符串 s,找到 s 中最长的回文子串。

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

自己的题解,暴力

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
    let len = 0;
    let rs = '';
    for(let i=0;i<=s.length;i++){
        for(let j=i+1;j<=s.length;j++){
            //暴力解法
            let nrs = s.slice(i,j)
            if(isHW(nrs)){//如果截取的是回文串
                if(nrs.length>len){
                    len = nrs.length
                    rs = nrs
                }
            }
        }
    }
    return rs
};

//判断回文字符串
let isHW = function(s){
    for(let i=0,j=s.length-1;i<j;i++,j--){
        if(s[i]!==s[j]){
            return false
        }
    }
    return true
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

运行效率极差,不学算法碰到类似题目,想破脑袋都想不出啊😭

# 题目四:

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

滑动窗口

如果我们依次递增地枚举子串的起始位置,那么子串的结束位置也是递增的。k+1到rk的字符串显然是不重复的,并且少了原本的第k个字符

解法:当字符串不重复时 right ++ ,当字符串重复是 left++ 进入下一个循环

let getMax = function(s){
  if(s.length<=1) return s.length
  let left = 0, right = 1
  let max = 0 , rs=[]
  while(right<s.length){
  	rs = s.slice(left,right)
    if(rs.indexOf(s.charAt(right))>-1){
       left++//开新循环
       continue
    }else {
      right++
    }
    max = max > right-left ? max:right-left
  }
  return max 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 选择题

  1. 下列哪些是 HTML5 的新特性 ABCD

    A . 语义标签

    B . Canvas 绘图

    C. <audio> 元素

    D. 增强型表单

  2. 下面可以继承的属性有哪些 ACD

    A. font-size

    B. background

    C. color

    D. cursor

  3. 对于一条100M的宽带,理论下载速度上限是多少 A

    A. 12.5MB/s

    B. 100MB/s

    C. 10MB/s

    D. 10Mb.s

  4. 关于 for of 和 for in 的描述,正确的是 A D

    A. for in 可以循环普通对象

    B. for of 可以循环普通对象

    C. 都不可以循环数组

    D. 都可以循环数组

  5. 关于事件冒泡描述正确的是 A

    A. 从元素目标向 document 冒泡

    B. 从 document 向目标元素冒泡

    C. 从 document 向目标元素冒泡,在从目标元素向 documnet 冒泡

    D. 以上都不是

  6. 以下哪些 script 标签属性会使脚本有可能在 DOMContentLoaded 事件之后加载 AD

    A. <script async>

    B. <script defer>

    C. <script type="module">

    D. <script type="module" async>

  7. 以下哪些是 css 块级元素的特性 B D

    A . 宽度默认由其中的内容决定

    B . 高度默认由其中的内容决定

    C . 可以被拆分到多行

    D . 可以通过height 属性指定高度

  8. 以下关于跨域说法错误的是 A

    A. http://example.com/a.html 和 https://example.com/b.html 是相同的域名,属于同源

    B. 跨域资源共享规范中规定了除了GET之外的 HTTP 请求,或者搭配某些 MINI 类型的 POST 请求,浏览器需要先发送一个 OPTIONS 请求

    C. CSS中通过 @font-face 使用字体也会有跨域问题

    D. Cookie、LocalStorage 和 IndexedDB 都会受到同源策略的限制

  9. 下列哪些可以实现浏览器存储数据 ABD

    A. cookie

    B. localStorage

    C. session

    D. sessionStorage

  10. 对以下代码说法正确的是 A

    let arr = [1,2,3,4,5]
    let arr2 = [1,,3]
    
    1
    2

    A. 执行 arr.length = 3 ,此时数组为 [1,2,3]

    B. 执行 arr[10] = 11 , 此时 arr.length 为 6

    C. 执行 delete arr[2] ,此时 arr.length 为 4,数组为 [1,2,4,5]

    D. arr2.length 的长度为 2

  11. 在 css 选择器当中, 优先级排序正确的是 D

    A. id选择器 > 标签选择器 > 类选择器

    B. 标签选择器 > 类选择器 > id 选择器

    C. 类选择器>标签选择器>id选择器

    D. id选择器>类选择器>标签选择器

  12. 如以下代码所示,给 body 绑定两个事件后,调用 document.body.click() 输出的结果是 A

    document.body.addEventListener('click',()=>{
      Promise.resolve().then(()=>{
        console.log(1)
      })
      console.log(2)
    },false)
    document.body.addEventListener('click',()=>{
      Promise.resolve().then(()=>{
        console.log(3)
      })
      console.log(4)
    },false)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    A. 2, 4, 1, 3 B. 2, 1, 4, 3 C. 1, 2, 3, 4 D. 1, 3, 2, 4

  13. 浮动会导致页面的非正常显示,以下几种清除浮动的方法,哪个是不推荐使用的 D

    A. 在浮动元素末尾添加一个空的标签例如 <div style="clear:both">

    B. 通过设置父元素 overflow 值为 hidden

    C. 给父元素添加clearfix类

    D. 父元素也设置浮动

  14. 以下代码运行结果是 D

    var f = function (){
      console.log("1")
    }
    function f(){
      console.log("2")
    }
    f();
    
    1
    2
    3
    4
    5
    6
    7

    A. undefined B. 报错 C. 2 D. 1

  15. 下列说法正确的有哪些 A C

    A. visibility:hidden 表示所占据的空间位置仍然存在,仅为视觉上的完全透明

    B.display:none 不为被隐藏的对象保留其物理空间

    C. visibility:hidden 与 display:none 两者没有本质上的区别

    D. visibility:hidden 回流与重绘

  16. 若主机甲与主机已建立一条 TCP 链接,最大段长 MSS 为 1KB,往反时间RTT为 2ms,则在不出现拥塞的前提下,拥塞窗口用 8KB 增长到 32KB 所需要的最长时长是 D

    A. 4ms B. 8ms C. 24ms D. 48ms

  17. 以下对HTML标签的使用,哪些是符合语义的 A C

    A. 使用 table 展示表格数据

    B. 使用 span 表示按钮

    C. 使用 article 展示文章内容

    D. 使用 P 标签展示文章标题

  18. 包过滤防火墙对数据包的过滤依据不包括哪些 C

    A. 源IP地址

    B. 源端口号

    C. MAC地址

    D. 目标IP地址

编辑 (opens new window)
上次更新: 2023/02/07, 15:11:55
day03-ts

day03-ts→

最近更新
01
01day01-html与css
02-07
02
day02-js
02-07
03
day03-ts
02-07
更多文章>
Theme by Vdoing | Copyright © 2022-2023 yuadh | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式