字节跳动(客户端开发-教育)

一面 9.22 45min

  • 自我介绍
  • 程序在内存中分配
    int main(int argc, char* argv[]){   
       int i = 0;    
       int arr[3] = {0};    
       for(; i<=3; i++){       
          arr[i] = 0;     
          printf("hello world\n");   
       }   
       return 0;
    } 
    输出结果是什么?
    变量分配在哪里?
    栈的特点?i和arr在栈上的分配情况详细介绍?(一块内存区从高到低)
    “地址递减”编址方式分配内存:编译器编译程序时,按变量声明先后,从可分配内存中从高地址向低地址分配内存。(其实是栈内存区的编址方式)
    程序中引用了arr[3]————数组下标越界(VC++6.0编译器可以检查出显示的下标越界,但是不检查隐式的下标越界)。循环内部会将所谓的arr[3]置0,而arr[3]实质上就是i,导致程序最终死循环。
    长度为n的数组,获取第m个元素的地址,计算机是怎么计算的?
    arr_m_address = arr + m * sizeof(arr[])
    arr[0]=0; //0xf0   //低地址
    arr[1]=0; //0xf4
    arr[2]=0; //0xf8
    i=0;      //0xff   //高地址
  • 链表来实现LRU缓存淘汰策略?
    时间复杂度:o(n)
    优化策略:hashmap
    key/value分别是什么?
  • 说一说http,挑重点说
    应用层 web页面请求 底层基于TCP
    GET POST DELETE等方式
    TCP三次握手
    80端口
    状态码 1xx 2xx 3xx 4xx 5xx
    HTTPS SSL握手 443
  • HTTP1.1 和2.0区别?
    1、多路复用
    HTTP2.0使用了多路复用技术,做到同一个连接并发处理多个请求,且并发请求的数量比HTTP1.1大了好几个数量级。HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但创建TCP连接本身也是有开销的。
    2、头部数据压缩
    在HTTP1.1中,HTTP请求和响应都是由状态行、请求/响应头部、消息主体三部分组成。一般而言,消息主体都会经过gzip压缩,或者本身传输的就是压缩过后的二进制文件,但状态行和头部却没有经过任何压缩,直接以纯文本传输。随着Web功能越来越复杂,每个页面产生的请求数也越来越多,导致消耗在头部的流量越来越多,尤其是每次都要传输UserAgent、Cookie这类不会频繁变动的内容,完全是一种浪费。
    HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
    3、服务器推送
    服务端推送是一种在客户端请求之前发送数据的机制。网页使用了许多资源:HTML、样式表、脚本、图片等等。在HTTP1.1中这些资源每一个都必须明确地请求。这是一个很慢的过程。浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。
    为了改善延迟,HTTP2.0引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。
  • HTTP报文格式?
    HTTP的请求报文包括:请求行(request line)、请求头部(header)、空行和请求数据(request data) 四个部分组成。
    请求行包括:请求方法,URL(包括参数信息),协议版本这些信息(GET /admin_ui/rdx/core/images/close.png HTTP/1.1);
    请求头部(Header)是一个个的key-value值,比如
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
    空行(CR+LF):请求报文用空行表示header和请求数据的分隔
    请求数据:GET方法没有携带数据, POST方***携带一个body
  • SSL握手过程?
  • 介绍虚拟内存
  • 虚拟内存解决了什么问题
    内存空间有限;
    多进程同时;
  • 介绍页表设计
  • 手撕:判断是否是镜像二叉树
给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
    1
   / \
  2   2
 / \ / \
3  4 4  3

#include <bits/stdc++.h>
using namespace std;
struct TreeNode
{
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x):val(x),left(nullptr),right(nullptr) {}
};
bool myequal(TreeNode* r1,TreeNode* r2)
{
    if(r1==nullptr && r2==nullptr) return true;
    if(r1==nullptr || r2==nullptr) return false;
    if(r1->val!=r2->val) return false;
    return myequal(r1->left,r2->right)&&myequal(r1->right,r2->left);
}
bool is(TreeNode* root)
{
    if(root==nullptr) return true;
    return myequal(root->left,root->right);
}

非递归的方法?

  • 智力题:
    条件:

1.64匹马
2.8个赛道
3.每次比赛只能知道比赛结果名次,不能知道具体时间
求:用最少的比赛次数,找出最快的4匹
11场
8 + 1 + 1 + 1

#面经#
全部评论
问了这么多问题啊
1 回复 分享
发布于 2020-09-25 16:57
楼主怎么样,出结果了没
点赞 回复 分享
发布于 2020-09-23 21:26
我也是22面的  到现在还没有结果  问题都能回答  手撕代码也都写出来了   我真的想知道教育真的还有hc么??
点赞 回复 分享
发布于 2020-09-24 12:05
客户端这么难?
点赞 回复 分享
发布于 2020-09-25 17:07

相关推荐

不愿透露姓名的神秘牛友
10-12 10:48
已编辑
秋招之苟:邻居家老哥19届双2硕大厂开发offer拿遍了,前几天向他请教秋招,他给我看他当年的简历,0实习实验室项目技术栈跟开发基本不沾边😂,我跟他说这个放在现在中厂简历都过不了
点赞 评论 收藏
分享
10-14 10:56
已编辑
长沙学院 嵌入式软件开发
痴心的00后拿到了ssp:hr面挂了,无所谓了反正不去😃
点赞 评论 收藏
分享
评论
2
30
分享
牛客网
牛客企业服务