精华内容
下载资源
问答
  • 字节跳动(2019年抖音面试题-内部资料),提供抖音笔试题、抖音面试题、抖音面试流程
  • 抖音面试总结

    2021-06-12 00:43:17
    点击上方"Python测试社区",选择"设为星标"第一时间关注技术干货!抖音面试总结目录1、技术一面2、技术二面3、技术三面4、HR面试1、技术一面 简单做...

    点击上方"Python测试社区",选择"设为星标"

    第一时间关注技术干货!

    抖音面试总结

    目录

    • 1、技术一面

    • 2、技术二面

    • 3、技术三面

    • 4、HR面试

    1、技术一面


    简单做一下自我介绍?

    简要介绍一下项目/你负责的模块/选一个模块说一下你设计的用例?

    get请求和post请求的区别?

    如何判断前后端bug?

    说一下XXX项目中你做的接口测试/做了多少次?

    http和https的区别?

    adb命令/查看连接/查看日志?

    fiddle如何打断点/设置弱网?

    说一下支付功能的测试点?

    给你一个腾讯视频的播放界面说一下测试点?

    说一下直播打赏功能的测试点?

    2、技术二面


    来北京的原因/简单自我介绍/项目中担任的角色/如何进入测试行业/离职原因/期望的测试工作状态?

    简要介绍自己的项目/在其中担任的角色/负责模块/app以哪个系统为主?

    抓包工具fiddler如何mock数据/如何修改服务端的返回/服务端返回helloworld如何改为helloword12?

    如何模拟404/断网?

    get请求和post请求的区别/为什么body更安全?

    adb命令用过哪些/列出所有应用的包名?

    monkey的各种参数/解释各种参数/之前执行命令是用现成的还是自己写/说一个触摸类事件占比50%的monkey命令?

    详细说一下http的各种状态码/503是什么/401和403的区别/除了状态码俩者会有什么返回/出现403会怎么解决/证书具体指什么证书/除了ca证书,其它获取证书的方法?

    使用emmagee会有什么前提标准/会不会考虑电量、亮度/做这些性能指标的时候会考虑什么情况/有操作的状态会一直刷吗/冒烟测试的使用方法?

    selenium定位元素的方法/css和xpath的区别?

    给你一个抖音的界面/如何测试一下主流程/测哪些元素/压力测试如何做/用什么对特定页面元素进行压力测试/除了功能正常情况,有哪些异常情况/如何做异常模拟?

    如何进行接口测试/怎么设计接口测试的用例?

    你有什么问题想问我?

    3、技术三面


    简单自我介绍/项目介绍?

    monkey的各种参数?

    用过抖音吗/给你一个场景,你在某地刷抖音,突然视频加载不出来了什么原因/如何排查网络不好的情况/排除网络原因,还有其他原因导致视频加载不出来么?

    手机app崩溃闪退的原因/如何测试手机内存/软件使用时的内存/emmagee可以测吗/怎么判断是这个软件所消耗的内存而不会是其他软甲所耗费的?

    http和https的区别/除了安全性、需要导入证书等还有吗?

    get请求和post请求的区别,详细说明?

    微信换头像的测试点?

    4、HR面试


    简单自我介绍/为什么来北京/现居住地/自我发展空间?

    最近一段时间在干什么/尝试了什么新鲜事物?

    入职之后,你最讨厌或者说最不喜欢和什么样的同事打交道?

    有没有对象/打算什么时间结婚?

    非计算机及相关专业如何进入到测试中/在公司初次接触测试,你主要的职责/对于你而言,给你收获最多的一个项目是什么/原因是什么/项目具体是什么?

    之前的薪资是多少/期望薪资是多少/说一下为什么会期望这些薪资?

    已经找工作多久了/手中是否还有其他offter/接收到offter多久可以入职?

    你有什么问题想问我?

    如果您觉得文章还不错,请 点赞、分享、在看、收藏 一下,因为这将是我持续输出更多优质文章的最强动力!

    没有关注的小伙伴,扫描下方二维码  点击公众号名片,获取更多精彩!

    如有任何问题或想技术探讨等,请扫描作者微信交流!

    展开全文
  • 以微信为例,我们录制一个540p的mp4文件,对于Android来说,大体上是遵循这么一个流程: 大体上就是从摄像头输出的YUV帧经过预处理之后,送入编码器,获得编码好的h264视频流。 上面只是针对视频流的编码,另外...

    Android的视频相关的开发,大概一直是整个Android生态,以及Android API中,最为分裂以及兼容性问题最为突出的一部分。摄像头,以及视频编码相关的API,Google一直对这方面的控制力非常差,导致不同厂商对这两个API的实现有不少差异,而且从API的设计来看,一直以来优化也相当有限,甚至有人认为这是“Android上最难用的API之一”

    以微信为例,我们录制一个540p的mp4文件,对于Android来说,大体上是遵循这么一个流程:

    大体上就是从摄像头输出的YUV帧经过预处理之后,送入编码器,获得编码好的h264视频流。

    上面只是针对视频流的编码,另外还需要对音频流单独录制,最后再将视频流和音频流进行合成出最终视频。

    这篇文章主要将会对视频流的编码中两个常见问题进行分析:

    1.视频编码器的选择(硬编 or 软编)?
    2.如何对摄像头输出的YUV帧进行快速预处理(镜像,缩放,旋转)?

    视频编码器的选择

    对于录制视频的需求,不少app都需要对每一帧数据进行单独处理,因此很少会直接用到MediaRecorder来直接录取视频,一般来说,会有这么两个选择:
    1.MediaCodec
    2.FFMpeg+x264/openh264

    我们来逐个解析一下

    一.MediaCodec(硬编)

    MediaCodec是API 16之后Google推出的用于音视频编解码的一套偏底层的API,可以直接利用硬件加速进行视频的编解码。调用的时候需要先初始化MediaCodec作为视频的编码器,然后只需要不停传入原始的YUV数据进入编码器就可以直接输出编码好的h264流,整个API设计模型来看,就是同时包含了输入端和输出端的两条队列:

    因此,作为编码器,输入端队列存放的就是原始YUV数据,输出端队列输出的就是编码好的h264流,作为解码器则对应相反。在调用的时候,MediaCodec提供了同步和异步两种调用方式,但是异步使用Callback的方式是在API 21之后才加入的,以同步调用为例,一般来说调用方式大概是这样(摘自官方例子):

     MediaCodec codec = MediaCodec.createByCodecName(name);
     codec.configure(format, …);
     MediaFormat outputFormat = codec.getOutputFormat(); // option B
     codec.start();
     for (;;) {
       int inputBufferId = codec.dequeueInputBuffer(timeoutUs);
       if (inputBufferId >= 0) {
         ByteBuffer inputBuffer = codec.getInputBuffer(…);
         // fill inputBuffer with valid data
         …
         codec.queueInputBuffer(inputBufferId, …);
       }
       int outputBufferId = codec.dequeueOutputBuffer(…);
       if (outputBufferId >= 0) {
         ByteBuffer outputBuffer = codec.getOutputBuffer(outputBufferId);
         MediaFormat bufferFormat = codec.getOutputFormat(outputBufferId); // option A
         // bufferFormat is identical to outputFormat
         // outputBuffer is ready to be processed or rendered.
         …
         codec.releaseOutputBuffer(outputBufferId, …);
       } else if (outputBufferId == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
         // Subsequent data will conform to new format.
         // Can ignore if using getOutputFormat(outputBufferId)
         outputFormat = codec.getOutputFormat(); // option B
       }
     }
     codec.stop();
     codec.release();
    

    简单解释一下,通过getInputBuffers获取输入队列,然后调用dequeueInputBuffer获取输入队列空闲数组下标,注意dequeueOutputBuffer会有几个特殊的返回值表示当前编解码状态的变化,然后再通过queueInputBuffer把原始YUV数据送入编码器,而在输出队列端同样通过getOutputBuffersdequeueOutputBuffer获取输出的h264流,处理完输出数据之后,需要通过releaseOutputBuffer把输出buffer还给系统,重新放到输出队列中。

    从上面例子来看的确是非常原始的API,由于MediaCodec底层是直接调用了手机平台硬件的编解码能力,所以速度非常快,但是因为Google对整个Android硬件生态的掌控力非常弱,所以这个API有很多问题:

    1.颜色格式问题

    MediaCodec在初始化的时候,在configure的时候,需要传入一个MediaFormat对象,当作为编码器使用的时候,我们一般需要在MediaFormat中指定视频的宽高,帧率,码率,I帧间隔等基本信息,除此之外,还有一个重要的信息就是,指定编码器接受的YUV帧的颜色格式。这个是因为由于YUV根据其采样比例,UV分量的排列顺序有很多种不同的颜色格式,而对于Android的摄像头在onPreviewFrame输出的YUV帧格式,如果没有配置任何参数的情况下,基本上都是NV21格式,但Google对MediaCodec的API在设计和规范的时候,显得很不厚道,过于贴近Android的HAL层了,导致了NV21格式并不是所有机器的MediaCodec都支持这种格式作为编码器的输入格式! 因此,在初始化MediaCodec的时候,我们需要通过codecInfo.getCapabilitiesForType来查询机器上的MediaCodec实现具体支持哪些YUV格式作为输入格式,一般来说,起码在4.4+的系统上,这两种格式在大部分机器都有支持:

    MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar
    MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar
    

    两种格式分别是YUV420P和NV21,如果机器上只支持YUV420P格式的情况下,则需要先将摄像头输出的NV21格式先转换成YUV420P,才能送入编码器进行编码,否则最终出来的视频就会花屏,或者颜色出现错乱

    这个算是一个不大不小的坑,基本上用上了MediaCodec进行视频编码都会遇上这个问题

    2.编码器支持特性相当有限

    如果使用MediaCodec来编码H264视频流,对于H264格式来说,会有一些针对压缩率以及码率相关的视频质量设置,典型的诸如Profile(baseline, main, high),Profile Level, Bitrate mode(CBR, CQ, VBR),合理配置这些参数可以让我们在同等的码率下,获得更高的压缩率,从而提升视频的质量,Android也提供了对应的API进行设置,可以设置到MediaFormat中这些设置项:

    MediaFormat.KEY_BITRATE_MODE
    MediaFormat.KEY_PROFILE
    MediaFormat.KEY_LEVEL
    

    但问题是,对于Profile,Level, Bitrate mode这些设置,在大部分手机上都是不支持的,即使是设置了最终也不会生效,例如设置了Profile为high,最后出来的视频依然还会是Baseline,Shit…
    这个问题,在7.0以下的机器几乎是必现的,其中一个可能的原因是,Android在源码层级hardcode了profile的的设置:

    // XXX
    if (h264type.eProfile != OMX_VIDEO_AVCProfileBaseline) {
        ALOGW("Use baseline profile instead of %d for AVC recording",
                h264type.eProfile);
        h264type.eProfile = OMX_VIDEO_AVCProfileBaseline;
    }
    

    Android直到7.0之后才取消了这段地方的Hardcode

    if (h264type.eProfile == OMX_VIDEO_AVCProfileBaseline) {
        ....
    } else if (h264type.eProfile == OMX_VIDEO_AVCProfileMain ||
                h264type.eProfile == OMX_VIDEO_AVCProfileHigh) {
        .....
    }
    

    这个问题可以说间接导致了MediaCodec编码出来的视频质量偏低,同等码率下,难以获得跟软编码甚至iOS那样的视频质量。

    3.16位对齐要求

    前面说到,MediaCodec这个API在设计的时候,过于贴近HAL层,这在很多Soc的实现上,是直接把传入MediaCodec的buffer,在不经过任何前置处理的情况下就直接送入了Soc中。而在编码h264视频流的时候,由于h264的编码块大小一般是16x16,于是乎在一开始设置视频的宽高的时候,如果设置了一个没有对齐16的大小,例如960x540,在某些cpu上,最终编码出来的视频就会直接花屏!

    很明显这还是因为厂商在实现这个API的时候,对传入的数据缺少校验以及前置处理导致的,目前来看,华为,三星的Soc出现这个问题会比较频繁,其他厂商的一些早期Soc也有这种问题,一般来说解决方法还是在设置视频宽高的时候,统一设置成对齐16位之后的大小就好了。

    二.FFMpeg+x264/openh264(软编)

    除了使用MediaCodec进行编码之外,另外一种比较流行的方案就是使用ffmpeg+x264/openh264进行软编码,ffmpeg是用于一些视频帧的预处理。这里主要是使用x264/openh264作为视频的编码器。

    x264基本上被认为是当今市面上最快的商用视频编码器,而且基本上所有h264的特性都支持,通过合理配置各种参数还是能够得到较好的压缩率和编码速度的,限于篇幅,这里不再阐述h264的参数配置

    openh264则是由思科开源的另外一个h264编码器,项目在2013年开源,对比起x264来说略显年轻,不过由于思科支付满了h264的年度专利费,所以对于外部用户来说,相当于可以直接免费使用了,另外,firefox直接内置了openh264,作为其在webRTC中的视频的编解码器使用。

    但对比起x264,openh264在h264高级特性的支持比较差:

    • Profile只支持到baseline, level 5.2
    • 多线程编码只支持slice based,不支持frame based的多线程编码

    从编码效率上来看,openh264的速度也并不会比x264快,不过其最大的好处,还是能够直接免费使用吧。

    软硬编对比

    从上面的分析来看,

    1.硬编的好处主要在于速度快,而且系统自带不需要引入外部的库,但是特性支持有限,而且硬编的压缩率一般偏低,
    2.而对于软编码来说,虽然速度较慢,但是压缩率比较高,而且支持的H264特性也会比硬编码多很多,相对来说比较可控。就可用性而言,
    3.在4.4+的系统上,MediaCodec的可用性是能够基本保证的,但是不同等级的机器的编码器能力会有不少差别,建议可以根据机器的配置,选择不同的编码器配置。视频流合流然后包装到mp4文件,这部分我们可以通过

    面试精选。进阶。视频教程~更多面试详情请关注我的主页查询。

    展开全文
  • 今天给大家把我压箱底的一些BATJ等一线大厂面试资料献出来,主要为Android 基础与底层原理技术点要求。先声明这些都是我在一个安卓高级技术社群里收集的,也整理了相应的答案方便大家有个参考,如果有侵犯泄露等问题...

    今天给大家把我压箱底的一些BATJ等一线大厂面试资料献出来,主要为Android 基础与底层原理技术点要求。先声明这些都是我在一个安卓高级技术社群里收集的,也整理了相应的答案方便大家有个参考,如果有侵犯泄露等问题请私我解决谢谢。

    请看面试题;

    1. 数据库的操作类型有哪些,如何导入外部数据库?(腾讯)

    读懂题目。如果碰到问题比较模糊的时候可以适当问问面试官。配合面试官来面试:面试是一个相互了解的过程,要充分利用面试的题目和时间把自己的能力和技术展现出来,面试官能够看到你的真实技术。

    1) 使用数据库的方式有哪些?

    • openOrCreateDatabase(String path);
    • 继承SqliteOpenHelper类对数据库及其版本进行管理(onCreate,onUpgrade)

    当在程序当中调用这个类的方法getWritableDatabase()或者getReadableDatabase();的时候才会打开数据库。如果当时没有数据库文件的时候,系统就会自动生成一个数据库。

    2) 操作的类型:增删改查CRUD

    • 直接操作SQL语句:SQliteDatabase.execSQL(sql);

    • 面向对象的操作方式:SQLiteDatabase.insert(table, nullColumnHack, ContentValues);

    如何导入外部数据库?

    • 一般外部数据库文件可能放在SD卡或者res/raw或者assets目录下面。

    • 写一个DBManager的类来管理,数据库文件搬家,先把数据库文件复制到”/data/data/包名/databases/”目录下面,然后通过db.openOrCreateDatabase(db文件),打开数据库使用。

    我上一个项目就是这么做的,由于app上架之前就有一些初始数据需要内置,也会碰到数据的升级等问题,我是这么做的…… 同时我碰到最有意思的问题就是关于数据库并发操作的问题,比如:多线程操作数据库的时候,我采取的是封装使用互斥锁来解决……

    1. 是否使用过本地广播,和全局广播有什么差别?(抖音)

    引入本地广播的机制是为了解决安全性的问题:

    1) 正在发送的广播不会脱离应用程序,比用担心app的数据泄露;
    2) 其他的程序无法发送到我的应用程序内部,不担心安全漏洞。(比如:如何做一个杀不死的服务---监听火的app 比如微信、友盟、极光的广播,来启动自己。)
    3) 发送本地广播比发送全局的广播高效。(全局广播要维护的广播集合表 效率更低。全局广播,意味着可以跨进程,就需要底层的支持。)

    本地广播不能用静态注册。----静态注册:可以做到程序停止后还能监听。

    使用:

    (1) 注册
    LocalBroadcastManager.getInstance(this).registerReceiver(new XXXBroadCastReceiver(), new IntentFilter(action));
    (2) 取消注册:
    LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)

    3. 是否使用过 IntentService,作用是什么, AIDL 解决了什么问题? (小米)

    4. Activity、 Window、 View 三者的差别, fragment 的特点?(360)

    5. 描述一次网络请求的流程(新浪)

    6. Handler、 Thread 和 HandlerThread 的差别(小米)

    7. 低版本 SDK 实现高版本 api(小米)

    8. launch mode 应用场景(百度、小米、乐视)

    9. touch 事件传递流程(小米)

    10. view 绘制流程(百度)

    11. 什么情况导致内存泄漏(美团)

    12. ANR 定位和修正

    13. 什么情况导致 oom(乐视、美团)

    14. Android Service 与 Activity 之间通信的几种方式

    15. Android 各个版本 API 的区别

    16.如何保证一个后台服务不被杀死,比较省电的方式是什么?(百度)

    17. Requestlayout, onlayout, onDraw, DrawChild 区别与联系(猎豹)

    18. invalidate()和 postInvalidate() 的区别及使用(百度)

    19. Android 动画框架实现原理(腾讯)

    20. Android 为每个应用程序分配的内存大小是多少?(美团)

    看具体的手机平台,常见的有:64M/32M等

    21. LinearLayout 对比 RelativeLayout(百度)

    22. 优化自定义 view(百度、乐视、小米)

    1)减少在onDraw里面大量计算和对象创建和大量内存分配。
    2)应该尽量少用invalidate()次数。
    3)view里面耗时的操作layout。减少requestLayout()避免让UI系统重新遍历整棵树。Mearsure。
    4)如果你有一个很复杂的布局,不如将这个复杂的布局直接使用你自己的写的ViewGroup来实现。减少了一个树的层次关系 全部都是自己测量和layout,达到优化的目的。(Facebook就经常这么干)

    24. ContentProvider(乐视)

    提示:跨进程通信。进程之间进行数据交互共享。;源码来一剁。

    25.fragment 生命周期

    26. volley 解析(美团、乐视)

    27. Android Glide 源码解析

    28. Android 属性动画特性(乐视、小米)
    ..............

    文章篇幅不够,没有全部贴上答案详解;

    对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

    这里附上上述的技术体系图相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

    由于篇幅有限,这里以图片的形式给大家展示一小部分。

    详细整理在石墨文档可以见;

    Android架构视频+BAT面试专题PDF+学习笔记​

    网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

    天道酬勤,只要你想,大厂offer并不是遥不可及!

    希望本篇文章能为你带来帮助,如果有问题,请在评论区留言

    展开全文
  • 字节跳动抖音 测试工程师 视频面试

    千次阅读 多人点赞 2020-07-08 06:12:12
    字节跳动2021提前批测试开发 ---------------------------------------...200 - 请求成功 301 - 资源被永久转移大其他URL 404 - 请求的资源不存在 500 - 内部服务器错误 抖音同城的测试 能否准确定位,试试更新定位,...

    字节跳动2021提前批测试开发

    ---------------------------------------面经1 2020-07-03--------------------------------------

    1. 接口测试中遇到的问题怎么解决
      接口测试:测试系统组件间接口的测试,用于检测外部系统与系统之间以及内部各子系统之间的交互点。重点检查数据的交换,传递和控制管理过程,以及系统间的交互逻辑依赖关系等。
      接口有两种:
      (1)内部接口:方法与方法、模块与模块之间的交互
      (2)调用对外包装的接口:
      接口参数数据类型:数值型,字符串型,数组/链表,结构体
      接口测试常见问题:
      (1)特殊值处理不当导致程序异常退出或崩溃;
      (2)类型边界溢出,导致数据读出和写入不一致;
      (3)取值边界外值未返回正确的错误信息;
      (4)参数为null或空字符串“”等;
      (5)权限未处理,可以访问其他用户的信息;

    2. TCP和UDP的区别及应用场景
      TCP和UDP是传输层的协议
      面向连接 VS 无连接
      TCP建立一个连接需要3次握手IP数据包,断开连接需要4次挥手。而且断开连接时发起方可能进入TIME_WAIT状态长达数分钟,此状态下连接无法被释放;
      UDP不需要建立连接,可以直接发起
      可靠 VS 不可靠
      TCP利用握手,ACK和重传机制,UDP没有
      1)校验和,校验数据是否损坏;
      2)定时器,分组丢失则重传;
      3)序列号,检测丢失的分组和重复的分组;
      4)确认应答ACK,接收方告知发送方正确接收分组以及期望的下一个分组
      5)否定确认,接收方通知发送方未被正确接收的分组;
      6)窗口和流水线,用于增加信道的吞吐量,窗口大小:无需确认应答可以继续发送数据的最大值
      有序性
      TCP利用seq序列号对包进行排序,UDP没有
      面向字节流 VS 面向报文
      1)面向字节流:应用程序和TCP的交互是一次一个数据块,TCP把应用程序看成一连串的无结构字节流;
      2)面向报文:应用层交给UDP多长的报文,UDP就照样发送,一次发送一个报文
      TCP有流量控制,UDP没有
      TCP头部有20字节,UDP有8字节
      应用场景
      1)TCP:效率要求相对低,但准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等:文件传输、接收邮件、远程登录
      2)UDP:效率要求相对高,对准确性要求相对低的场景:QQ聊天、在线视频、网络语音电话等即时通讯、广播通信

    3. 进程和线程的区别
      进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位
      线程:是进程的一个执行单位,是进程内的调度实体,比进程更小的独立运行的基本单位,线程也称轻量级进程。一个程序至少一个进程,一个进程至少一个线程
      区别:
      1)地址空间:同一进程的线程共享本进程的地址空间,而进程之间是独立的地址空间
      2)资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、CPU等,但进程之间的资源是独立的
      3)独立执行:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口,但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
      4)线程是处理器调度的基本单位,但进程不是
      5)两者均可并发执行

    4. 了解哪些数据结构?数组与链表的区别
      数据结构:相互之间存在一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成的。数据结构包括数据的逻辑结构(反应数据元素之间的逻辑关系)、存储结构(数据的逻辑结构在计算机存储空间中的存放形式)和运算结构。
      线性表:顺序表、链表、栈、队列
      树结构:普通树、二叉树、线索二叉树
      图结构数据
      数组与链表的区别:
      1)存储区间连续 VS 不连续
      2)存储数据 VS 存储数据的数据域和指向下一个节点地址的指针域
      3)随机访问性强O(1) VS 查找效率低O(n)
      4)插入删除效率低O(n) VS 插入删除效率高O(1)
      5)数组空间从栈分配 VS 链表空间从堆分配

    5. 进程的死锁、进程的状态有哪些?
      死锁:指多个进程在执行过程中,由于竞争资源或者彼此通信而造成的一种阻塞的现象(相互挂起等待),若无外力作用,它们都将无法推进下去,称产生了死锁
      死锁产生的原因:
      1)系统的资源不足
      2)进程(线程)推进的顺序不对
      3)资源的分配不当
      死锁产生的四个必要条件
      1)互斥条件:进程申请的资源在一段时间中只能被一个进程使用;
      2)请求与等待条件:进程已经拥有了一个资源,但是又申请新的资源,拥有的资源保持不变
      3)不可剥夺条件:在一个进程没有用完,主动释放资源的时候,不能被抢占
      4)循环等待条件:多个进程之间存在资源循环链
      处理死锁的方法:
      1)预防死锁:破坏死锁产生的四个条件之一,互斥条件不能破坏
      2)避免死锁:合理分配资源
      3)检查死锁:利用专门的死锁机构检查死锁的发生,采取相应方法
      4)解除死锁:一般是强行剥夺资源
      进程的状态:一个进程的生命周期可以划分为一组状态
      1)就绪状态:进程已经具备运行条件,但是CPU还没有分配过来
      2)运行状态:进程占用CPU,并在CPU上运行
      3)阻塞状态:进程因等待某件事发生而暂时不能运行
      状态装换:
      1)运行–>就绪:1. 系统分配给进程占用CPU的时间片完成;2. 抢先式优先级调度算法的系统中,有更高优先级的进程要运行,进程被迫让出CPU,转为就绪状态;
      2)就绪–>运行:运行的进程的时间片用完,调度到就绪队列中选择合适的进程分配CPU
      3)运行–>阻塞:正在执行的进程因发生某等待事件而无法执行,转为阻塞状态,如I/O请求
      4)阻塞–>就绪:进程所等待的事情已经发生,进入就绪队列

    6. 断点续传
      从文件上次中断的地方开始重新下载或上传。实现断点续传需要客户端记录下当前的下载或上传进度,并在需要续传的时候通知服务器本次需要下载或上传的内容片断。否则每次出现异常或用户主动的暂停,都要重头下载,浪费时间

    7. 数据库的索引
      索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息
      索引包括:1)主键索引:特殊的唯一索引,不允许有空值;2)普通索引:最基本的索引,没有任何限制;3)唯一索引:索引值必须唯一,允许有空值;4)复合索引:多个字段上建立索引

    8. 表A插入表B的语句
      若两表字段一致:INSERT INTO TB SELECT * FROM TA
      若只导入指定字段:INSERT INTO TB(WORD1, WORD2) SELECT WORD1, WORD2 FROM TA 字段顺序必须一致

    9. HTTP请求过程
      HTTP:HyperText Tansfer Protocol,超文本传输协议,基于TCP的关于数据如何在万维网中通信的协议
      1)对网址www.baidu.com进行DNS域名解析,得到对应的IP地址
      2)根据IP找到对应的服务器,发起TCP三次握手
      3)建立TCP连接后发起HTTP请求
      4)服务器响应HTTP请求,浏览器得到HTML代码
      5)浏览器解析HTML代码,请求HTML代码中的资源(如图片、CSS等)
      6)浏览器对页面进行渲染呈现给用户
      7)服务器关闭TCP连接
      DNS如何找到域名:递归查询方式,先找DNS缓存->找根域名服务器->根域名再找下一级
      为什么HTTP协议基于TCP实现连接:TCP是端到端可靠的面向连接的协议,HTTP基于传输层TCP协议不用担心数据传输不准确等问题
      发起HTTP请求:HTTP请求报文由三部分组成:1)请求行:描述客户端的请求方式(GET/POST等),请求的资源名称(URL,统一资源定位符)以及使用的HTTP协议版本号;2)请求头:描述客户端请求哪台主机及其端口;3)空行;4)请求正文:使用POST方法时,需要客户端向服务器传递数据,数据存储在请求正文中(GET方式保存在URL地址后,不放在这里)
      HTTP的请求方法:GET和POST的区别
      1)GET从服务器上获取数据,POST向服务器传送数据。它们都是传递数据的方式,本质上都是发送请求和接收结果,只是组织格式和数据量上有差别;
      2)GET和POST都是TCP连接,GET产生一个数据包,POST产生两个TCP数据包;
      3)GET把HTTP HEADER和DATA一并发送过去,服务器响应200(返回数据),而POST方式下,浏览器先发送HEADER,服务器响应100 continue,浏览器再发送DATA,服务器响应200 OK(返回数据)

    10. 如果和伙伴的观点有冲突怎么办?
      1)缓和气氛,先自我检讨责任是否在自己一方,如果是的话就要承认错误并承担责任;
      2)如果是对方的观点有误,应该及时沟通,采集多方意见。大家都是一个团队一个部门的,我们的目的都是要为公司效力,谁的观点对集体最有益,就应该选择谁的观点,一致朝着同一方向去努力。

    11. 如果伙伴到deadline还没有完成任务怎么办?
      首先我和伙伴做的工作是一个团队工作,他没有完成相等于我也没有完成,一个团队工作不能独立划分成个人的工作。如果伙伴到deadline还没有完成,我也要承认自己没有完成,然后尽量deadline前一起完成一个雏形

    12. 为什么选测开?测开人员要具备什么样特质?
      1)因为我听说测试开发岗位比较适合女生,不会太累,而我自己也希望将来进入社会能够尽力平衡好生活和工作两个方面,这样我觉得自己才能一直对工作保持着一定的热情和动力;
      2)还有测试的话就相等于是跟开发的代码呈现一个对立面,比如说我希望一个产品质量要很好,那我就要尽可能想出他可能会出问题的地方,尽力地补充、完善,后续才不会出大问题。测试是对产品有个质量保障的第一关吧。
      3)学习能力,积极乐观的态度,较强的逻辑思维
      什么是软件测试:软件测试是检查实际结果与预期结果是否匹配并确保软件系统无缺陷的活动。软件测试还有助于识别产品与实际需求不符或是缺失项。测试活动既可以手动完成,也可以使用自动化工具完成。有些人更喜欢将软件测试称为白盒和黑盒测试
      软件测试的目标:在给定的产品中尽可能多地发现错误(或bug);演示一个给定的软件产品与它的需求规格匹配;使用最小的成本和努力来验证软件的质量;生成高质量的测试用例,执行有效的测试,并发布正确和有用的问题报告
      为什么软件测试很重要:测试很重要,因为软件错误可能很昂贵甚至很危险,一个bug越长越不被发现,它就可能带来更大的隐患。此外,如果测试团队错过了准确详尽地捕捉或识别风险和软件问题,会导致一些灾难发生
      软件测试开发人员应该具备什么特质:
      1)细心;2)耐心;3)沟通能力,语言表达能力:与客户,开发,产品等方面保持密切关系;4)理解能力:对需求的准确理解;5)责任感;6)学习能力:测试需要不断接触新功能、新理论、新技术

    13. 代码题:输出一个数组的所有子集
      递归法

    14. 对上面编写的代码做单元测试,怎么测试?
      单元测试是对软件中的最小可测试单元进行检查和验证,一般指一个函数,一个类等,是认为规定的最小被测试功能模块
      单元测试的好处:1)不需要每次都对完整的程序进行运行、测试;2)可以测试某个方法的耗时和性能

    15. 了解测试用例嘛?情景题:对即将上线的哇哈哈矿泉水进行测试用例的设计
      测试用例:是一份测试文档,目的是确定系统的某个特性是否正常工作
      为什么要写测试用例:科学有效地对测试步骤进行组织规划,方便管理,记录
      从什么方面设计产品的测试用例:功能、性能、兼容性、用户体验、稳定性、安全性、可靠性
      娃哈哈矿泉水测试用例:
      1)功能:考虑正常情形和异常状况。水瓶的材料,溶剂,瓶身厚度,瓶盖大小,瓶盖开启方式,瓶盖密封程度,瓶子颜色和透明度,承受最高温;
      2)性能:验证功能实现的效率高低,水瓶出水的流畅度,倾斜多少角度开始出水;
      3)稳定性:测试功能能不能break,时刻保持工作;比如在不同的环境温度下,瓶盖是否能咬合紧密,瓶身能否保持原先的韧性,瓶子跌落多次后瓶身是否会变形等;(稳定性要求功能实现一千一万次也能持续产生输出)
      4)可靠性:测试功能能不能出错,保持“正确地”工作;反复打开关闭瓶盖,在合理次数范围内,瓶盖是否依然可以正常扭紧,不漏水(可靠性不仅要求产生输出,而且要产生正确的输出)
      5)安全性:测试产品自身的安全以及使用产品的“用户”的安全:水瓶的材料是否安全,是否会渗透对人体有害的元素;加入开水是否容易烫伤用户
      6)兼容性:确保产品有良好的适配性和可移植性;除了装水,可否装入其他的液体,水瓶体积和外形能否放在车内空间里

    16. 反问环节
      1)贵公司对员工有什么职业发展方面的培训?
      2)想问公司里的团队里的氛围怎么样,自己希望能在一个团结、上进的团队中学习、工作。因为我觉得自己蛮有责任心的,很有团队意识,不论做什么都会尽到自己的责任。

    ---------------------------------------面经2 2020-07-03--------------------------------------
    字节跳动2021提前批测试开发面经_2
    2020-07-04

    1. C和C++的区别
      C语言:面向过程语言,分析出解决问题的步骤,把这些步骤一步一步地实现,使用的时候再一次调用。性能高,不易维护、复用和扩展
      C++语言:面向对象编程语言,把问题分解成各个对象,描述某个事物在整个解决问题的步骤中的行为。性能低,对象实例化开销大,易维护,易复用、易扩展

    2. 虚函数和纯虚函数的区别
      虚函数既有定义,又有实现
      纯虚函数是只有定义,没有实现代码的函数

    3. C++的三个特性和解释
      封装:突破了C语言函数的概念,可以隐藏实现细节,使代码模块化。封装是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
      继承:扩展已存在的代码模式(类)。封装和继承的目的是:代码重用。指一个对象从另一个对象获得功能的过程,提供明确表述共性的方法,不断向上抽取的过程
      多态:使用未来,即当前框架不需改变也可以使用后来的代码,目的是:接口重用
      1)多态的体现:父类引用指向自己的子类对象;父类引用接收自己的子类对象
      2)多态的前提:类与类之间存在关系
      3)多态的实现方式:
      函数重载:必须在同一个类中进行,子类无法重载父类的函数,父类同名函数被名称覆盖。重载是在编译期间根据参数类型和个数决定函数调用
      函数重写:必须发生在父类与子类之间,父类与子类中的函数必须有完全相同的原型,使用virtual声明后能产生多态,是在运行期间根据具体对象的类型决定函数调用

    4. 构造函数和析构函数
      构造函数:与类同名,在创建对象时自动调用,用于构造对象。如果没有显示编写构造函数,C++会自动提供
      析构函数:与类同名,前面加波浪号。当删除所创建的对象时执行,有助于在跳出程序前释放资源

    5. 状态码,域名解析的步骤
      状态码:浏览器访问网页时,浏览器向网页所在服务器发出请求,当浏览器接收并显示网页前,网页服务器会返回一个包含HTTP状态码的信息头(server header)来响应浏览器的请求
      200 - 请求成功
      301 - 资源被永久转移大其他URL
      404 - 请求的资源不存在
      500 - 内部服务器错误

    6. 抖音同城的测试
      能否准确定位,试试更新定位,定位多大范围内为同城,搜索同城用户

    ---------------------------------------面经3 2020-07-05--------------------------------------
    字节跳动2021提前批测试开发面经_3
    2020-07-05

    1. 给一个数组,里面有一些数字, 把这些数字排序,使得拼出来的数字最大

    2. 如何测试发送图片的功能,视频加载失败如何测试
      测试发送图片:
      1)0k大小的图片发送;2)不同格式(png, jpg, gif, bmp)的图片发送;3)大于1M的图片发送;4)不选择图片直接上传;5)上传代特殊符号的名字的图片;6)查看上传的图片是否正常显示;7)发送的图片能否正常删除;8)测试多张图片同时发送;
      视频加载失败测试
      1)测试网络连接是否正常、通畅
      2)测试小视频的加载
      3)Adobe Flash Player下载

    3. GET和POST的区别,安全性
      GET和POST都是TCP连接,本质上都是发送请求和接收结果,在组织格式和数据量上有差别;
      GET产生一个数据包,POST产生两个数据包
      GET把HTTP HEADER和DATA一并发送过去,数据存储在URL地址后面,数据有长度限制。服务器响应200返回数据
      POST产生两个数据包,数据存储在请求正文中,数据量没有限制。POST先发送HEADER,服务器响应100continue,然后再发送DATA,服务器响应200返回数据
      POST的安全性更高,因为GET的URL会被log记录下来,如果数据中有敏感字符或特殊字符不适合用GET请求

    4. TCP三次握手
      客户端向服务器发送一段TCP报文,其中:
      1)标记号为SYN,表示“请求建立新连接”
      2)序号Seq=x(一般为1)
      客户端进入SYN-SENT阶段
      服务器收到来自客户端的TCP报文后,结束LISTEN阶段,并返回一段TCP报文:
      1)标志位为SYN+ACK,表示“确认客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”
      2)序号为Seq=y
      3)确认号ACK=x+1,表示收到客户端的序号Seq并在其值加1作为自己确认号ACK的值;服务器进入SYN-RCVD阶段
      客户端接收到来自服务器的确认后,结束SYN-SENT阶段,再发送一段TCP报文:
      1)标志位为ACK,表示“确认收到服务端同意连接的信号”
      2)序号Seq=x+1,表示收到服务器端的确认号ACK,并将其值作为自己的序号值
      3)确认号ACK=y+1,表示收到服务器端序号Seq,将其值加1作为自己的确认号ACK
      4)客户端进入ESTABLISHED阶段

    ---------------------------------------面经4 2020-07-05--------------------------------------
    字节跳动2021提前批测试开发面经_4
    2020-07-05

    1. HTTP和HTTPS的区别
      HTTP:超文本传输协议,是一种发布和接收HTML页面的方法,以明文方式发送信息
      1)客户端浏览器要先与服务器建立TCP连接,端口号是80。客户端建立连接后发送HTTP请求;
      2)服务器接到HTTP请求后给予相应的响应信息
      HTTPS:以安全为目标的HTTP通道,是HTTP的安全版,安全基础为SSL。SSL位于TCP/IP与各种应用层协议之间,为数据通讯提供安全支持。SSL分两层:
      1)SSL记录协议:建立在TCP之上,为高层协议提供数据封装、压缩、加密等基本功能的支持
      2)SSL握手协议:建立在SSL记录协议之上,在实际的数据传输之前通讯双方进行身份认证、协商加密算法等
      HTTP和HTTPS区别:
      1)HTTPS协议需要CA申请证书
      2)HTTP是超文本传输协议,信息是明文传输,HTTPS是具有安全性的SSL加密传输协议
      3)HTTP的端口号是80,HTTPS端口号是443
      4)HTTP连接简单,无状态;HTTPS是由HTTP+SSL构建的可加密传输、身份认证的网络协议,比HTTP安全

    2. linux命令,找出关键字出现的次数
      查找单个关键字:grep -o ‘objStr’ filename|wc -l
      grep匹配关键字 objStr:目标关键字 filename文件名 |wc -l查有多少个

    3. 数据库,查找一个学生两门功课都大于80分的姓名
      SELECT name FROM tableA GROUP BY name HAVING COUNT(SELECT DISTINCT COURSE FROM tableA WHERE score > 80) =2

    4. 浏览器中输入一个地址,按下回车后发生了什么
      浏览器对网址进行DNS域名解析,得到IP地址
      根据IP地址找到对应服务器,建立TCP连接
      浏览器发送HTTP请求
      服务器响应请求后返回HTML代码
      浏览器解析HTML代码,获得资源名称
      对页面进行渲染呈现给用户
      关闭TCP连接

    5. TCP三次握手四次挥手
      三次握手
      客户端向服务器发送一段TCP报文,其中:
      1)标记号为SYN,表示“请求建立新连接”
      2)序号Seq=x(一般为1)
      客户端进入SYN-SENT阶段
      服务器收到来自客户端的TCP报文后,结束LISTEN阶段,并返回一段TCP报文:
      1)标志位为SYN+ACK,表示“确认客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”
      2)序号为Seq=y
      3)确认号ACK=x+1,表示收到客户端的序号Seq并在其值加1作为自己确认号ACK的值;服务器进入SYN-RCVD阶段
      客户端接收到来自服务器的确认后,结束SYN-SENT阶段,再发送一段TCP报文:
      1)标志位为ACK,表示“确认收到服务端同意连接的信号”
      2)序号Seq=x+1,表示收到服务器端的确认号ACK,并将其值作为自己的序号值
      3)确认号ACK=y+1,表示收到服务器端序号Seq,将其值加1作为自己的确认号ACK
      4)客户端进入ESTABLISHED阶段
      四次挥手
      客户端发出连接释放报文,标志号为FIN=1,Seq=u,等于前面传送过的序号+1,客户端进入FIN-WAIT1(终止等待1)状态。FIN不携带数据也要消耗一个序号
      服务器返回确认报文,标志号ACK=1,ack=u+1,Seq=v,服务器进入CLOSE-WAIT(关闭等待状态)
      客户端收到服务器的确认请求后,进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文
      服务器向客户端发送连接释放报文,FIN=1,ack=u+1, 若此前有发送数据则Seq=w,服务器进入LAST-ACK(最后确认)状态,等待客户端的确认
      客户端收到连接释放报文后发出确认,ACK=1, ack = w+1, seq=u+1,客户端进入TIME-WAIT(时间等待)状态。经过2**MSL(最长报文段寿命)时间后,客户端撤销相应的TCB,才进入CLOSED状态

    【问题1】为什么连接的时候是三次握手,关闭的时候却是四次挥手?
    因为服务器接收到客户的SYN是,可以直接返回SYN+ACK报文,ACK用来应答,SYN用来同步;但是关闭连接时服务器收到FIN报文,不会立即关闭SOCKET,所以只能回复一个ACK报文,表示正常接收客户的FIN报文,等服务器所有的报文发送完毕,才发送FIN报文,因此需要四步。

    1. TCP拥塞控制
      拥塞控制原理:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能会变坏,叫做网络拥塞。既往中数位链路容量(带宽),交换结点中的缓存和处理及等都是网络的资源。若不进行拥塞控制,网络的吞吐量将随输入负荷的增大而下降。
      拥塞窗口cwnd状态变量,取决于网络的拥塞程度,并且动态变化。网络不拥塞,cwnd增大;网络拥塞,cwnd减少
      TCP的四种拥塞控制算法:
      1)慢开始:发送方cwnd=1, 发送窗口swnd=cwnd,只能发送一个数据报文段。接收方收到报文段后返回确认报文段,发送方cwnd=2,4,8,…按指数增长。当cwnd等于慢开始门限值ssthreshold,改用拥塞避免算法
      2)拥塞避免:拥塞窗口cwnd只能线性+1。若发生超时重传,网络可能出现拥塞:ssthreshold = cwnd/2, cwnd = 1,重新开始慢开始算法
      3)快重传:使发送方尽快进行重传,而不是等超时重传计时器超时再重传。接收方要立即发送确认,即使受到了失序的报文段也要立即发出对已收到的报文段的重复确认。发送方受到3个连续的重复确认,就将相应的报文段立即重传,不等超时重传计时器超时再重传
      4)快恢复:发送方一旦收到3个重复确认,就不启动慢开始算法,而执行快恢复算法。将慢开始门限ssthreshold和cwnd调整为当前窗口的一半,执行拥塞避免算法。

    2. 微信发红包测试用例
      功能:
      红包钱数、红包个数框只能输入数字
      红包钱数最大值和最小值限制,超过范围有提示
      红包个数超过范围有提示
      红包描述中输入汉字,表情,符号等
      红包描述超出最大字符数范围
      可否领取自己发出的红包
      可否多次抢红包
      自行选择红包支付方式
      性能:
      网弱时抢红包、发红包的时间
      发红包和收红包成功后的跳转时间
      收发红包的耗电量
      退款到账的时间
      兼容性
      苹果、安卓系统可否发送红包
      电脑端、手机端抢微信红包
      安全性
      对方微信号异地登录,是否有提醒
      发送红包失败后,余额和银行卡的钱数不会少
      红包发送成功,是否收到微信支付的通知

    3. 代码题:类似高考成绩,一个表中有很多数据(无序的),给你一个成绩,查出在表中的排名

    4. 算法,两个链表,找出这两个链表是否有相交的点

    ---------------------------------------面经5 2020-07-05--------------------------------------
    面经_5
    2020-07-05

    1. 数据结构的定义
      相互之间存在一种或多种特定关系的数据元素的集合

    2. 排序算法有哪些,时间复杂度和空间复杂度分别是多少
      排序算法 最坏时间复杂度 平均时间复杂度 稳定度 空间复杂度
      冒泡 O(n^2) O(n^2) √ O(1)
      插入 O(n^2) O(n^2) √ O(1)
      选择 O(n^2) O(n^2) √ O(1)
      快速 O(n^2) O(nlogn) × O(n)
      堆排 O(nlogn) O(nlogn) × O(1)
      归并 O(nlogn) O(nlogn) √ O(n)
      基数 O(d(r+n)) O(d(r+n) √ O(rd+n)

    3. 二叉树有哪些排序方式,如何实现
      中序遍历、前序遍历、后序遍历、递归实现

    4. 测试用例:今日头条推送文章,每天早上9点向当地30岁以上的人群推送当地的房地产信息
      用户年龄筛选,30岁以上
      早上九点定时发送
      推送文章筛选:房地产消息
      定位信息获取
      推文题目字数限制
      推文内容字数限制,正文内容允许插入图片,视频等
      推文允许用户评论、点赞、收藏
      发送推文时间

    ---------------------------------------面经6 2020-07-06--------------------------------------
    面经_6
    2020-07-06

    1. HTTP和HTTPS之间的区别

    2. 测试用例:抖音刷轮船
      连续点击刷出多个轮船
      点击后界面快速显示轮船
      刷出轮船同时扣除银行卡余额
      刷出轮船同时主播金钱到账
      余额不足提示刷礼物失败
      网查的情况下能否快速刷礼物

    3. 同样场景如果主播没收到轮船,怎么测试和定位
      重新进入直播刷轮船,测试观众的网络,检测观众的银行卡余额是否充足
      主播刷新界面查看是否收到来自其他观众的礼物
      主播方检测自己的网络是否通畅

    4. 对测试的了解
      软件测试:利用测试工具按照测试方案和流程对产品进行功能和性能测试,鉴定产品的正确性、完整性、安全性和质量的过程
      测试无处不在,平时在做实验写代码的时候,都会对代码/模块进行简单的测试
      测试和研发的区别:二者在工作职责、难易程度、技能要求等方面不同。测试的职责是找出程序中出现的问题,相对来说广度大专业度低,技能要求广泛,对测试工具使用,业务和架构分析以及用户需求等方面都要有所掌握。研发的职责是实现产品的功能,广度低,专业度高,专业技能要求高
      测试和测开的区别:功能性测试主要是手工地去执行写好的测试用例,验证实际输出和预期结果是否一致;测试开发是要把手工测试用例编写成自动化测试脚本,代替手工测试的过程。

    5. 进程和线程的区别

    6. 堆和栈的区别
      堆和栈指的是内存中的“堆区”和“栈区”。C语言的内存分为5个区:栈区、堆区、静态区、常量区、代码区:
      1)栈区:存放函数的参数值、局部变量等,由编译器自动分配和释放,在函数执行完后就释放
      2)堆区:通过new、malloc、realloc分配的内存块,编译器不负责他们的释放工作,由程序区释放
      3)静态区:全局变量和静态变量的存储,程序结束后由系统释放
      4)常量区,存储常量,不允许修改
      5)代码区:存放函数体的二进制代码

    7. TCP和UDP的区别

    8. 测试和测开的区别

    9. HTTP的请求方式有哪些

    10. 代码题:求两个数的公倍数

    11. 职业规划

    ---------------------------------------面经7 2020-07-06--------------------------------------

    面经_7
    2020-07-06

    1. 代码题:实现X!

    2. 数据库左连接、右连接

    3. 链表

    4. 进程和线程的区别

    5. 反问

    6. 618购买手机,怎么快速知道手机没有问题
      检查手机外观
      启动手机,是否正常启动
      连接网络是否正常
      打开软件/浏览器检查网络流畅度
      体验使用的使用程度,界面是否流畅、美观、不卡壳
      能否正常充电
      电量消耗是否正常

    ---------------------------------------面经8 2020-07-06--------------------------------------
    面经_8
    2020-07-06

    1. GET和POST的区别

    2. 代码题:一个数组怎么调顺序合起来最大

    3. HTTP和HTTPS的区别

    4. JAVA垃圾回收机制
      在程序创建对象、数组等引用类型实体时,系统会在堆内存中为之分配一块内存区,对象就保存在内存区中,当内存不再被任何引用变量引用时,这块内存就变成了垃圾,等待垃圾回收机制去进行回收。垃圾回收机制只负责回收堆内存中的对象,不回收任务物理资源。

    5. 内存泄漏和内存溢出
      内存溢出:out of memory,指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory。也就是说要求分配的内存超出了系统能给你的,无法满足需求,产生溢出
      内存泄漏:memory leak,指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏危害可以忽略,但内存泄漏堆积后果很严重,无论多少内存,迟早会被占光。例如系统申请分配内存进行使用(new),使用完后却不归回(delete)

    6. 江浙沪一带抖音用户出现问题,什么原因?
      江浙沪区域的网络有问题
      用户数量太多,出现拥挤

    7. 手机APP使用未响应,什么原因?
      确认其他APP是否无响应
      若其他软件响应速度正常,则该软件运行程序有问题
      中了木马类病毒,找相关杀毒软件来清除

    8. 智力题:8个球其中一个轻球,分几次称找出来
      2次。前去六个球,每边放三个:
      若平衡,则称剩下的两个球,较轻的球就是;
      若不平衡,从较轻的三个球中取两个来称:平衡则第三个是,不平衡则较轻球是

    9. TCP连接

    10. 地址栏输入网址按回车的过程

    11. 对一个矿泉水瓶编写测试用例

    12. 网页状态码有哪些
      HTTP状态码:当浏览者访问一个网页时,浏览器想网页所在的服务器发出请求,浏览器接收并显示网页前,此网页所在的服务器返回一个包含HTTP状态码的信息头(server header),响应浏览器的请求
      100 Continue继续
      200 请求成功
      301 资源被永久转移到其他URL
      404 请求的资源不存在
      500 内部服务器出现错误

    ---------------------------------------面经9 2020-07-06--------------------------------------
    面经_9
    2020-07-06

    1. OSI七层协议
      物理层:机械、电子、定时接口通信信道上的原始比特流传输。集线器、中继器
      数据链路层:物理寻址,同时将原始比特流转变为逻辑传输线路。ARP地址解析协议,RARP逆向地址解析协议。网桥,交换机
      网络层:控制字网的运行,如逻辑编制、分组传输、路由选择。ICMP互联网控制信息协议。路由器
      传输层:接受上一层的数据,在必要是对数据进行分割,并把这些数据交给网络层,保证数据段有效到达对端。TCP传输控制协议,UDP用户数据报协议。网关
      会话层:不同机器上的用户之间建立及管理会话。SSL安全套接字层协议
      表示层:信息的语法语义以及他们的关联,如加密解密、转换翻译、压缩解压缩
      应用层:各种程序协议,如HTTP, FTP, SMTP, POP3

    2. TCP特点,自动重传机制,tcp断开连接方式,为什么四次挥手
      TCP特点:面向连接、面向字节流、可靠的传输控制协议、面向字节流
      自动重传机制:当接收到失序报文段时,TCP需要立即生成确认信息(重复ACK),发送方重传可能丢失的数据分组,而不必等到重传计时器超时
      TCP断开连接方式:四次挥手:1)客户端FIN=1, Seq=u,客户端进入FIN-WAIT-1终止等待;2)服务器返回ACK=1,Seq=v, ack=u+1,服务器进入CLOSED-WAIT关闭等待;3)服务器返回FIN=1,ack=u+1,进入LAST-ACK最后确认状态;4)客户端发送ACK=1,Seq=u+1, ack = w+1,经过2**MSL时间后,CLOSED状态
      为什么四次挥手
      因为服务器收到客户端的FIN后不会立即关闭SOCKET,只能回复一个ACK,表示正常接收关闭连接的报文,等服务器所有的报文发送完毕后才发送FIN报文。而建立连接发送SYN后,服务器可以直接返回SYN+ACK报文。因此有四次挥手

    3. Cookie
      Cookie是存储在用户计算机上的小文件,旨在保存特定于客户端和网站的适量数据,并由Web服务器或客户端浏览器访问。帮助网站跟踪用户的访问和活动

    4. HTTP协议
      超文本传输协议HTTP是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础

    5. 什么是线程,线程的状态有哪些
      线程是操作系统能进行运算调度的最小单位,被包含在进程中,是进程的实际运作单位。
      线程的状态:
      1)新建状态:用new操作符创建一个线程
      2)就绪状态:调用start()方法启动线程,创建线程运行的系统资源
      3)运作状态:线程获得CPU时间后,执行run()方法,开始执行
      4)阻塞状态:正在运行的线程没有运行结束,暂时让出CPU。调用sleep()方法进入睡眠状态;调用一个在I/O上被阻塞的操作,在输入输出完成前不会返回到它的调用者;线程试图得到一个锁,而锁正被其他线程持有;在等待某个触发条件
      5)死亡状态:run()方法正常退出而线程自然死亡;一个未捕获的异常终止了run()方法

    6. 数据结构有什么常用结构,栈和队列区别,如何用两个栈实现一个队列
      栈和队列的联系:
      都是控制访问点的线性表
      允许在端点处进行数据的插入和删除的数据结构
      栈和队列的区别:
      栈遵循“后进先出LIFO”,只能在线性表的一头进行插入和删除。栈适合用顺序表
      队列遵循“先进先出FIFO”,在尾部插入元素,在头部删除元素,用链表实现比较好

    7. 二叉树是什么,树的遍历方式,图的遍历方式
      二叉树:特殊的树,每个节点最多有两个节点;满二叉树:所有叶子结点都在最底层,除了叶子结点每个节点都有两个子节点;完全二叉树:从上到下,从左到右的节点都是连续的
      树的遍历方式:前、中、后序遍历,层次遍历
      图遍历方式:深度优先遍历(类似于数的前序遍历),广度优先遍历(类似于树的层次遍历)

    8. 有哪些排序方法?说一下快速排序的思路,以及时间复杂度。贪心算法是什么
      贪心算法:在对问题求解时,总是做出在当前看来是最好的选择,即不从集体最优上加以考虑,只考虑局部最优解
      动态规划:将一个问题拆成几个子问题,分别求解这些子问题,即可推断出大问题的解

    9. 软件测试方法有哪些?白盒测试的动态测试有哪些?
      按是否查看程序内部结构:黑盒测试:只关心输入和输出;白盒测试:考虑内部结构
      按是否运行程序:静态测试:不实际运行软件,静态检查程序代码、界面或文档可能存在的错误;动态测试:实际运行程序,输入相应的测试数据,检查输出结果和预期结果是否相符
      按阶段划分:单元测试:对最小可测试单元进行检查验证;集成测试:测试单元模块组成的子系统,测试不同模块的接口部门;系统测试:将整个软件系统看作一个整体进行测试;验收测试:以用户测试为主,有测试人员共同参与的测试,分为alpha测试和beta测试
      动态测试:采用逻辑覆盖,包括路径覆盖,语句覆盖,分支覆盖,条件覆盖,分支-条件覆盖

    10. 什么是测试用例,编写测试用例的方法,假如刷今日头条时候,发现白屏,可能是什么原因?怎么测试?
      测试用例:一组由前提条件、输入、执行条件、预期结果等组成,以完成对某个特定需求或者目标测试的数据,体现测试方案、方法、技术和策略的文档
      为什么写测试用例:科学有效的对测试步骤进行组织规划,方便管理,记录
      编写测试用例的方法:等价类划分,边界值,因果图,错误猜测法
      今日头条时候,发现白屏:原因可能是网络不稳定,加载缓慢;内部服务器出错,显示500状态码;测试方法:检查网络稳定,反馈客服,删除缓存和数据库等

    ---------------------------------------面经10 2020-07-06--------------------------------------
    面经_10
    一面
    主要还是计算机网络和数据结构的问题

    1、网络的分层 每层的功能

    2、tcp协议和udp协议的差别

    3、三次握手、原因

    4、计算机的组成、输入程序到exe执行输出编译过程

    5、post输入后到打开页面经历的过程

    6、堆栈的差别、编译过程中程序、临时变量的存储

    7、stp了解吗?这个我不知道

    8、测试:抖音上下滑动

    9、dns、从url得到Ip的过程、以及问了一下防火墙原理了解吗?

    10、网页状态码,重定向

    11、代码题:一开始是一个数组求最大子集,我说了暴力解法 双指针,然后他就说别写这个了、改成写两个数组求交集的代码,要求用map

    12、对于上述程序写测试用例

    13、http和https的差别

    14、最后问了未来的职业规划,以及有什么问题要问他的

    二面

    1、还是自我介绍和项目

    2、问了数组和链表的差别 各个操作的时间复杂度 空间复杂度

    3、http和https,端口、get和post差别

    4、栈 队列

    5、然后就很猝不及防地问平时用哪些数据结构比较多

    我说栈 容器 数组 字符串,

    二叉树了解吗?把中序遍历写出来吧

    要求10?还是15min写完,我说可以用栈和递归,两个本来都要写,写完栈的然后讲了一下思路,把递归的思路讲了就没写了

    6、后续都是测试相关的问题,购物车做测试etc

    7、然后问了很多未来职业规划、如果测试和研发的想法冲突怎么办?如果个人想做的和leader要求的任务不一样怎么办?

    8、对于字节的了解,有没有去其他公司的想法?对于上班时间,可能加班的想法?

    9、为什么选择做测试?未来做测试开发选哪个?如果通过能不能来实习?

    10、有什么其他问题要问的?

    ---------------------------------------面经11 2020-07-06--------------------------------------
    面经_11

    1.自我介绍
    2.项目中的分布式数据库和传统关系型数据库的区别?
    3.项目细节
    4.项目中遇到的困难?怎么解决的?
    5.你的实现怎么保证项目质量?
    6.进程和线程的不同点与相同点?
    7.进程间的通信方式?
    8.死锁的四个必要条件?
    9.堆和栈的区别
    10.网络OSI模型
    11.应用层有哪些协议
    12.HTTP用到的方法有哪些?get和post的区别?
    13.路由器工作在哪一层?
    14.三次握手和四次挥手
    15.冒泡的时间复杂度、快排的时间复杂度、快排最差时间复杂度
    16.快排是稳定排序吗?什么是稳定排序?
    17.c++面向对象的特性
    18.c++的重载和重写
    19.测试观点:微博评论
    20.评论中图片不显示的原因?
    21.输入url到网页显示经历的过程
    22.有哪些提高系统性能的方法
    23.代码:假设有n个人,每次数第k个出列,出列后接着下一个人重新数,最后出列的那个人的序号
    24.为什么想做测试开发
    25.你认为做测试开发需要具备些什么?
    26.反问

    ---------------------------------------面经12 2020-07-06--------------------------------------
    一面
    1.自我介绍
    2.项目介绍
    3.(数据库,计网,JVM相关没有问)问了HashMap的Java底层实现原理,扩容机制,2的n次幂,怎么扩容怎么解决冲突,扩容之后地址值是否改变。
    4.就HashMap面试官深挖了很多,LZ看书喜欢自己理解记忆,所以感觉答得都是按照自己想的来的,没有像书本一样很规范,下来查了下也有一个说错了,崩溃.jpeg。
    5.两道算法题,LZ平时刷题太少,只说了思路,代码熟悉度不够,后面得加紧练习。
    6.微信文字框输入到发送接收这个过程测试用例的设计。
    7.小哥哥最后问还有什么想了解的?

    二面
    1.自我介绍(问了为什么要做测试,测试和开发相比有什么区别和岗位定性,目前以自己的能力和想法觉得测试更适合我,并不是人人都适合做算法,有个工作开开心心的干,开开心心的赚钱就行)
    2.项目介绍
    3.HTTP相关,有哪些方法,说了常用的post,get,put,并让比较区别,安全性,以及常用场景用到的是哪个,提到了HTTP是TCP面向连接可靠传输,于是下面开始TCP、UDP的询问
    4.TCP可靠传输,三次握手,四次挥手
    5.应用层有哪些协议,我记得不是很多,但是这些协议都是按照TCP可靠交付和UDP不可靠但高效交付分类的,说了HTTP,FTP,邮件等相关协议,应用UDP的协议是比较注重高效和实时传输对差错容忍率小的一些场景
    6.输入网址到按回车发生了什么?
    7.数据库相关,LZ表明只了解基础,问了 内连接,左连接,右连接,我描述答得让人难以理解,可能就我自己理解,于是小哥哥举例让我做出了回答,很nice呀
    8.往数据库插入100万条数据怎么插?一般for循环,慢?批量传,面试官在引导,我完全没接触过这个,按照自己理解答了答案,后期想一想不应该是这样不对,然后断电了,于是下去做了功课,类似于深度学习的batch输入
    9.然后问了JVM相关回收算法,LZ也是刚刚理解着看得ing
    10.java语言相关,问了多态,重写,重载,深拷贝,浅拷贝(没有答上来)
    11.微信点赞功能测试用例设计,我考虑还是不太全面,最后问到弱网模拟,觉得思维定势让人变傻,我想太多了。
    12.智力题,那会智力突然低下,没答出来,下来想想就是2的n次幂,找对应关系,用二进制位移,心理在高压情况下还是不行
    13.一道字符串相关的编程题,题不难,可是我写了一半,只有思路,(恨自己为什么不多刷刷题,提高代码熟悉度)
    14.感恩小哥哥最后给了一些面试建议,明确我身上存在的问题,抗压力以及面试技巧方面,还有字节挺注重编码能力的

    ---------------------------------------面经13 2020-07-06--------------------------------------
    面经_13
    1.自我介绍
    2.项目
    3.七层网络及协议
    4.TCP,UDP不同,为什么三握四挥
    5.http方式及状态码
    6.http header
    7.进程和线程
    8.测试朋友圈点赞(功能、兼容性)
    9.app加载慢为什么(从七层网络角度)
    10.各种测试类型
    11.判断旋转字符串

    展开全文
  • 抖音:三轮技术面 + 一轮HR 面 ???? 拼多多:三轮技术面 + 一轮HR 面 ???? 美团:三轮技术面 + 一轮HR 面 ???? 比心:三轮技术面 + 一轮HR 面 ???? 得物(毒):一轮技术面 ???? eBay:三轮技术面 ?
  • 抖音,IES互娱 腾讯,PCG 应用宝数据中台 阿里,新零售供应链 美团,到店事业部 目前为止,除了阿里还在等交叉,其他均已收到 offer,硬核技术实力。小民说自己是个技术渣,这是个要求很高(有点装 X)的同学。 本...
  • 这是我第一次参加实习面试面试前也在网上查了一下算法岗面试的相关经验,受益颇大,因此自己面试完后也试着记录了一下,虽然没能通过最终面试,但也希望能给想面试相关岗位的人一些启发和帮助~ 关于面试准备: ...
  • 字节跳动技术美术面试抖音

    千次阅读 2020-07-09 19:31:55
    正式面试 渲染管线 顶点着色器作用,包括什么工作,MVP矩阵空间变换过程 M矩阵中旋转、平移、缩放顺序,分别在M矩阵的哪个部分,如何从M矩阵拆分获得三个变换矩阵,拆分顺序 顶点着色器到片元着色器中间流程 几何...
  • 抖音,IES互娱 腾讯,PCG 应用宝数据中台 阿里,新零售供应链 美团,到店事业部 目前为止,除了阿里还在等交叉,其他均已收到 offer,硬核技术实力。小民说自己是个技术渣,这是个要求很高(有点装 X)的同学。 本...
  • 前言 面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不...本月飞机到达上海,到今天第6天了,四家大公司华为,小米,映客,抖音,还有二家中小型公司。有几家已经面了几轮,下周还要面,挂了几家,不...
  • 近日,有网友在某社交平台发帖,简单讲了一下自己的字节的视频面试流程,引发网友们热议。 不少网友发表了自己对字节跳动面试流程的看法。 “感觉这一轮下来已经走向人生巅峰” “有点繁琐” “真是棒啊……不过...
  • 找工作还是需要大家不要紧张,有我们干这一行的接触人本来就不多 难免看到面试官会紧张,主要是因为怕面试官问的问题到不上来,那时候不要着急 ,答不上了的千万不然胡扯一些,直接就给面试官说这块我还没接触到,...
  • 抖音,IES互娱 腾讯,PCG 应用宝数据中台 阿里,新零售供应链 美团,到店事业部 目前为止,除了阿里还在等交叉,其他均已收到 offer,硬核技术实力。小民说自己是个技术渣,这是个要求很高(有点装 X)的同学。 本...
  • 主要业务和次要业务耦合,横向扩展流程复杂。 熔断降级全靠if-else。 微服务的三个阶段: 微服务1.0: 仅使用注册发现,基于SpringCloud或者Dubbo进行开发。 微服务2.0: 使用了熔断、限流、降级等服务治理策略,并...
  • 给文章留个小赞,就可以免费领取啦~ 戳我领取:3000页Android开发者架构师核心知识笔记 《960全网最全Android开发笔记》 《379页Android开发面试宝典》 包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、...
  • 直通BAT必考题系列:深入剖析JVM之G1收集器、及回收流程、与推荐用例 二面 自我介绍,主要讲讲做了什么和擅长什么 设计模式了解哪些? AtomicInteger怎么实现原子修改的? ConcurrentHashMap 在Java7和Java8中的区别...
  • 测试阶段:测试主要是保证测试用例的覆盖度,保证最坏情况发生时,我们也有相应的处理流程。 4. 发布阶段:发布时也有一些地方需要注意,因为发布时最容易出现错误,因此要有紧急的回滚机制。 5. 运行阶段:运行时...
  • 收到字节月薪35k Offer,揭秘面试流程及考点

    多人点赞 热门讨论 2021-06-07 15:03:58
    前段时间,有个朋友又出去面试了,这次他面试目标比较清晰,面的都是业务量大、业务比较核心的部门。前前后后去了不少公司,几家大厂里,他说给他印象最深的是字节。 3轮技术面 + 1 轮 HR 面,他最终拿到了 35k*15...
  • GC机制因为刚看过所以答的比较好,然而因为阿里面试开始太早,我还没来得及复习Android,所以Android相关的问题答的一塔糊涂,比如APP启动过程就支支吾吾乱说一气,View绘制流程干脆说不知道,跟面试官说我知道...
  • 最近发现一些读者,留言提到跳槽面试的事情。当中,有几个编程老兵,说他们从事Android 开发多年,薪资却还在原地打转,跳槽升职不是很顺利,十分困惑。这显然是遇到瓶颈期。 就目前大环境来看,今年跳槽成功的难度...
  • 1. 让简单介绍下自己(每次面试开场) 2. 让说下自己会的内容 3. 看了哪些书籍(有问到) 4. 了解过哪些技术博客/论坛(有问到) 5. 是否了解软件测试需要掌握哪些知识(问到类似问题) 6. 之前面试过,觉得...
  • 面试一 1、 简单做一下自我介绍 2、 简要介绍一下项目/你负责的模块/选一个模块说一下你设计的用例 3 、get请求和post请求的区别 4、 如何判断前后端bug/3xx是什么意思 5、 说一下XXX项目中你做的接口测试/做了...
  • 今天要和大家分享的是关于抖音 Android 性能优化的内存优化,希望对大家的学习和工作有所启发和帮助。 正文 内存作为计算机程序运行最重要的资源之一,需要运行过程中做到合理的资源分配与回收,不合理的内存占用轻...
  • 不管是工作还是面试中,Java都是必考题。如果不懂Java的话,薪酬会非常吃亏(美团尤为重视Java基础) 详细介绍了Java泛型、注解、并发编程、数据传输与序列化、高效IO、容器集合、反射与类加载以及JVM重点知识线程、...
  • 在上一篇我们中,我们分享了几大互联网公司面试的题目,本文就来详细分析面试题答案以及复习参考和整理的面试资料,小民同学的私藏珍品????。首先是面试题答案公布,在讲解时我们主要分成如下几...
  • 在上一篇文章中,我们分享了几大互联网公司面试的题目,本文就来详细分析面试题答案以及复习参考和整理的面试资料,小民同学的私藏珍品????。首先是面试题答案公布,在讲解时我们主要分成如下几...
  • 记第一次实习面试经历(字节跳动)

    万次阅读 多人点赞 2019-03-23 16:01:41
    笔者2.17号接到面试邀约,3.4号第一波抖音面试,四次技术面后被拒,奋起直追又找人又进行了二次内推(主要是第一次被拒的有点不明不白),从第二次内推到HR面试给口头Offer大概一周,本文主要记录从开始面试到最后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,635
精华内容 1,054
关键字:

抖音面试流程