贝壳找房测试开发一面凉经--北京现场面(附面试答案)(代码片段)

程序员二黑 程序员二黑     2022-12-15     464

关键词:

  • 📢 我是二黑,一个快要秃头的测试人

  • 📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📢 最困难的时候,也就是我们离成功不远的时候!


今天分享一份贝壳测开一面的面试题+答案。希望对大家有帮助。

1.单链表反转写

单链表是一种线性结构,它是由一个个节点(Node)组成的。并且每个节点(Node)是由一块数据域(data)和一块指针域(next)组成。

节点的数据域:data数据域一般就是用来存放数据的 。
节点的指针域:next指针域一般就是存放的指向下一个节点的指针,即:指针域中存放的是下一个节点对象的引用变量。

我们要解决这道题,需要明确两件事:

  1. 单链表的数据结构表示
  2. 单链表的逆序方法

单链表的数据结构表示(两个属性:data存放数据,next存放下一个节点对象的引用变量)

public class Node<T> 
    // 节点的数据域
    public T data;
    // 节点的指针域
    public Node next;

    /**
     * 构造方法
     * @param data 数据域值
     */
    public Node(T data) 
        this.data = data;
    

单链表逆序:一般可以采用三种方式:递归、双指针和循环遍历。
以下采用双指针法作为演示:

/**
 * @PACKAGE_NAME: com.lyl.linklist
 * @ClassName: ReverseByDoublePointerTest
 * @Description:  使用 双指针+辅助临时节点 实现单链表反转
 * @Date: 2020-05-30 19:17
 **/
public class ReverseByDoublePointerTest 

    /**
     * 使用 双指针+辅助临时节点 进行链表反转
     * @param head
     * @return 返回反转后的 head 头结点
     */
    public static Node reverse(Node head) 
        // 当前节点指针
        Node current ;
        // 前一节点指针
        Node previous;
        // 当前节点指针初始化指向头结点
        current = head;
        // 前一节点指针初始化为 null
        previous = null;

        while(current != null)
            // 辅助的临时节点, 存储当前节点的下一个节点
            Node temp = current.next;
            // 当前节点的下一个节点指向了前一个节点指针指向的节点
            current.next = previous;
            // 然后 前一节点指针向前移动一个节点,此时和当前节点指针都指向了当前节点
            previous = current;
            // 当前节点指针也向前移动一个节点,也就是移动到了当前节点的下一个节点,就是临时节点指向的节点
            current = temp;
        
        // 返回头结点
        return previous;
    


    // test
    public static void main(String[] args) 
        // 创建单链表
        Node head = Node.createLinkedList();
        // 遍历新创建的单链表
        System.out.print("新创建的单链表: ");
        Node.traverse(head);
        // 递归反转单链表
        Node newHead = reverse(head);
        // 遍历反转后的单链表
        System.out.print("反转后的单链表: ");
        Node.traverse(newHead);
    


2.用过Redis吗?

(1)Redis的使用场景:

热点数据缓存、消息队列、分布式锁、排行榜、延时操作、计数器等

(2)Redis的常见数据类型:

String、List、Hash、Set、Sorted Set

(3)Redis与数据库缓存一致问题:

缓存与数据库同步的大致的流程如图所示:

下面是删除数据时,出现缓存数据库数据不一致的两种情况:

情况一、删除数据时,先删缓存,再更新数据库。
先删除缓存,数据库还没有更新成功,此时如果读取缓存,缓存不存在,去数据库中读取到的是旧值,缓存不一致发生。

解决方案:延时双删

延时双删的方案的思路是,为了避免更新数据库的时候,其他线程从缓存中读取不到数据,就在更新完数据库之后,再 Sleep 一段时间,然后再次删除缓存。

情况二、先更新数据库,再删除缓存

先更新数据库,再删除缓存。更新数据库成功,如果删除缓存失败或者还没有来得及删除,那么,其他线程从缓存中读取到的就是旧值,还是会发生不一致。

解决方案:消息队列

先更新数据库,成功后往消息队列发消息,消费到消息后再删除缓存,借助消息队列的重试机制来实现,达到最终一致性的效果。

(4)什么是缓存穿透、缓存击穿和缓存雪崩:

缓存穿透:是指查询一个数据库一定不存在的数据。

缓存击穿:只会出现在热点数据上,发生在缓存失效的瞬间。

缓存雪崩:大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。

3.了解kafaka吗?对中间件有了解吗?

1)Kafka

Apache Kafka 是一款开源的消息系统。可以在系统中起到“肖峰填谷”的作用,也可以用于异构、分布式系统中海量数据的异步化处理。一共包含4个API:
Producer API:允许一个应用推送流记录通过一个或多个Kafka topics ;
Consumer API:允许一个应用订阅一个或多个topics 并且处理这些流记录;
Streams API:允许一个应用作为一个流处理者,通过topics 输入或输出流数据 ;
Connector API:绑定并运行 Producer 或 Consumer 连接Kafka topics 到 到已经存在的系统或存储上;

2)常用的中间件:

  1. 接入层中间件:nginx、openrestry、tomcat

  2. 缓存中间件:guava、redis

  3. 文件存储中间件:fastdfs、hdfs、oos、ES

  4. 数据库中间件:mycat、shardingsphere

  5. 消息中间件:Kafka、Rabbitmq、Rocketmq

  6. 搜索中间件:ES

  7. 引擎类中间件:Drools、URule、Activiti、Jflow

  8. 调度类中间件:xxljob、Azkaban、Airflow、Oozie、elastic-job、Jenkins

  9. 服务治理中间件:Zookeeper、nacos

  10. AMP中间件( Application Performance Management):zipkin、大众cat、skywalking

  11. 大数据中间件:hadoop、cdh、ambari、spark、flink、hive、hbase-phoenix、kylin、es

4. url输入到浏览器发生什么?

总体来说分为以下几个过程:

  • DNS 解析:将域名解析成 IP 地址
  • TCP 连接:TCP 三次握手
  • 发送 HTTP or HTTPS 请求
  • 服务器处理请求并返回响应(这里可以简要介绍MVC架构数据流转)
  • 浏览器解析渲染页面
  • 断开连接:TCP 四次挥手

5.如何测试电梯?

从黑盒测试的角度去思考:

  • 功能:关注电梯的基本功能是否实现
  • 性能:关注电梯的性能指标,如负重多少kg
  • 安全性:关注电梯的安全性,如超重报警,下坠制动
  • 用户体验:关注电梯的舒适性

白盒角度或其他角度去思考:

  • 效率:关注电梯控制逻辑的内部算法
  • 接口:电梯和电梯控制器,电梯和大楼,电梯和摄像头,电梯和对讲机(报警装置)的接口测试
  • 零件:电梯的零件的单元测试
  • 兼容性:电梯和其他东西的兼容性

tips:回答测试用例设计的面试题时的注意事项

  • 一定要明确测试用例设计的范围,这个阶段可以多向面试官询问测试需求、测试范围。
  • 明确系统的边界值以及核心的功能点,展开测试设计。
  • 不要张口就答,可以先在稿纸上画出大概的脑图,根据脑图,捋顺思路再做答。

6.为什么投测开?

…按自身情况回答

7.内外网地址转换

通过NAT技术进行转换,

NAT(Network Address Translation),中文名唤作网络地址转换,诞生于IP地址匮乏的时代。

NAT的基本思想是ISP(Internet服务提供商)为每个家庭或者公司分配一个IP地址,这个IP地址用作Internet流量的传输,也就是大家常说的外网IP地址或者公网IP地址。在客户网络的内部,每台计算机有唯一一个IP地址,即内网IP地址,这些地址主要用于路由内部流量。当一个数据包离开客户网络发送至其他ISP时,需要进行地址转换,把唯一的内网IP地址转换成外网的IP地址。

8.https证书机制


客户端向服务端发起https链接,服务端返回服务端证书。

证书的主要内容有公钥(Public Key)、ISSUER(证书的发布机构)、Subject(证书持有者)、证书有效期、签名算法、指纹及指纹算法。

客户端收到证书后需要做证书的验证工作。首先获取ISSUER的公钥,将加密了的指纹解密,同时计算证书内容的指纹,比对两者的内容,如果内容一致,说明服务端可信。

整个解密过程就是完成了一次签名的认证,证明这个证书是权威的发证机构颁发的(指纹用机构的私钥加密了),并且证书内容没有经过修改(指纹相符)。那么证书中持有者一定是权威机构认证的公司或者个人。

客户端生成对称加密算法使用的秘钥,将请求参数用服务端的公钥加密后传送给服务端。
服务端解密,之后使用对称秘钥通信,返回给客户端加密后的数据。

9.测开职业规划

…按自身情况回答

10.数据库索引建立如何选择?占用空间不?

索引建立的选择:

  • 频繁搜索、查询选择的列
  • 经常排序、分组的列
  • 经常用于连接的列(主键、外键)

不适合建立索引的情况:

  • 仅包含几个值的列
  • 表中仅包含几行

索引虽然能够提高查询效率,但是索引是需要占用空间的。

11.一组有序元素,选择哪种排序算法?为什么选择快速排序?若使用冒泡排序,最好时间复杂度是多少?冒泡排序最坏时间复杂度?

几乎有序的一组元素,建议用插入排序算法。

12.讲讲实习工作内容是啥?

应该没有了,就这些。

感谢有这次面试机会。

如果这篇文章对你有帮助,请给我点个三连!👍这样我才有动力继续更新下去!

最后,下面是我整理出来的一份软件测试工程师发展方向知识架构体系图。

希望大家能在这个成长过程中收益良多。可以说,这个过程会让你痛不欲生,但只要你熬过去了。以后的生活就轻松很多。正所谓万事开头难,只要迈出了第一步,你就已经成功了一半,古人说的好“不积跬步,无以至千里。”等到完成之后再回顾这一段路程的时候,你肯定会感慨良多。

由于CSDN上传图片大小有限,有需要的朋友可以关注我的公众号:程序员二黑,回复1,即可获取原图。

下面是一份配套的软件测试资源包:

上面是一些配套资源,对于软件测试的的朋友来说应该是最全面最完整的备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。

关注我的微信公众号:程序员二黑,即可免费获取!

最困难的时候,也就是我们离成功不远的时候!如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们的群:785128166 大家一起讨论交流学习。

推荐阅读

高薪程序员也躲不过35岁这一关…当能力与年龄脱节,我们该如何自救?

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+

字节跳动软件测试岗,前两面过了,第三面HR天坑!竟然跟我说……

字节跳动头条研发---测试开发一面面经(附答案)

你好,我是测试开发工程师——小捣。欢迎和我交流测试领域相关问题(测试入门、技术、python交流都可以)。因为读者里有不少刚入门测试的同学,这两天抽空整理了一份字节测开实习的面试题答案,说实... 查看详情

字节跳动大数据开发面试题-附答案(代码片段)

...迎指正!以下为面试过程中提问,岗位为大数据开发:自我介绍+项目介绍为什么用kafka、sparkstreaming、hbase?有什么替代方案吗?聊聊你觉得大数据 查看详情

这些题目都不会,面什么美团?(附答案)

...,说美团将他虐的很惨,然后他给土哥分享了一下大数据开发社招一面的面经。由于疫情,土哥被居家隔离了,所以美美的学习了4天,这不,给大家将面试答案总结出来。面试时间:90分钟面试方向:大数据开发面试工具:电话... 查看详情

面经1:字节跳动:22年实习生大数据开发面试(一面凉经)

...地研二狗,非科班出身,最近也是参加了大数据开发地面试,已拿到了哔哩哔哩和顺丰的大数据开发岗实习offer,现在把自己的面试经历分拨记录下来,记录了面试各个公司的问题和心经,给正在面试的你... 查看详情

测试开发岗-高频知识整理校招,内附面试题答案!

1.本文内容来源:本文是将自己在20年里找工作的部分笔记重新整理了下,不少内容当时是查阅的知乎、博客园、书籍等(部分还能找到原帖的均附上了链接)。我自己在这一年里也是从牛客上学习了很多面经和经验帖,... 查看详情

测试开发基础|python算法与数据结构面试题系列一(附答案)(代码片段)

1.时间复杂度问题已知AList=[1,2,3],BSet=1,2,3(1)从AList和BSet中查找4,最坏时间复杂度哪个大?(2)从AList和BSet中插入4,最坏时间复杂度哪个大?答:1、对于查找,列表和集合的最坏时间复杂度都是O(n),... 查看详情

用时一个半个月,七月刚入职字节跳动的测试开发面试题,内附答案(代码片段)

朋友入职已经两周了,整体工作环境还是非常满意的!所以这次特意抽空给我写出了这份面试题,而我把它分享给小伙伴们,面试&入职的经验!大概是在5月中的时候他告诉我投递了简历,7月的时候经... 查看详情

2022年java面试题最新整理,附白话答案(代码片段)

2022年Java开发面试题最新整理,附白话答案写在前面:本篇面试题整理是我在北京地区进行面试整理得出,常见的基本都在下面了。基本都是可以直接在面试时用白话回答的答案总结,面试时照此回答即可,有... 查看详情

面试群铁子尝试北京某厂java开发岗,一面,标价20-25k

  目前咱们《大厂面试百日冲刺》的交流群在只想学习进厂群,需要加入的同学可以加我我来安排,互相分享大家的面试经历和经验。本篇面试分享是某厂一面,对标一下,希望对各位有借鉴作用。Java中的自增... 查看详情

字节跳动提前批一面凉经

职业规划想做开发还是算法AndroidBitmap的内存占用,ARGB_8888占几个字节,采样率inSampleSizeActivity,Fragment生命周期,A活动启动B活动各自的生命周期说出一种图形加载库的原理事件分发机制,ScrollView嵌套Button事件消费JavaHashMap的底... 查看详情

面试群铁子尝试北京某厂java开发岗,一面,标价20-25k(代码片段)

  目前咱们《大厂面试百日冲刺》的交流群在只想学习进厂群,需要加入的同学可以加我我来安排,互相分享大家的面试经历和经验。本篇面试分享是某厂一面,对标一下,希望对各位有借鉴作用。Java中的自增... 查看详情

2021贝壳找房春招c++工程师笔试卷2(代码片段)

文章目录前言一、[编程题]完美序列1.1题目连接1.2题面1.3思路1.4代码二、[编程题]商场收益统计2.1题目链接2.2题面2.3思路2.4代码三、[编程题]大橘为重3.1题目链接3.2题面3.3思路3.4代码四、[编程题]叠大饼4.1题目链接4.2题面4.3思路4.4... 查看详情

字节跳动十年经验老鸟,耗时大半年整理的软件测试面试真题附答案

软件测试工程师,和开发工程师相比起来,虽然前期可能不会太深,但是涉及的面还是比较广的。前期面试实习生或者一年左右的岗位,问的也主要是一些基础性的问题比较多。涉及的知识主要有MySQL数据库的使... 查看详情

阿里云大数据开发一面面经,已过,面试题已配答案

这份面试题时群里一位小伙伴分享的,我给这份面试题找了一些参考答案参考答案来源:​​大数据面试题V3.0,523道题,779页,46w字​​1、实习经历这一点就不多说了,每个人都不一样,根据自己的介绍就行。2、简单介绍wordco... 查看详情

凉经-mozillafirefoxltd

北京谋智火狐信息技术有限公司(北京市东城区建国门华润大厦17层)过去面试的时候感觉电梯好神奇啊!一边的电梯是直达18层以上的,我按了18层准备到了再往下走一层,一个老司机和我说要做另一边的1-17层的电梯,这个电... 查看详情

贝壳找房上海研发全员被优化,公司回应:行业环境变化,部分岗位调整

...#xff09;10月11日,不少网友在某社交平台上爆料称,贝壳找房上海研发全员被优化,裁员补偿为“N+3”。贝壳找房回应裁员传闻对于裁员传闻,贝壳找房相关人士表示,今年以来,行业环境发生较大变化&#x... 查看详情

面试北京python后端开发

一二面一起面,属实刺激,然后记录一下面试题,查漏补缺文章目录一面:二面一面:列表和数组区别可变不可变深浅拷贝多线程类、函数、方法元组和列表mysql/redis简单带过设计模式django生命请求周期+MTV... 查看详情

贝壳找房上传房产证和身份证别人能看到吗

...除了公司,别人是看不到的。十分安全,不必有所顾虑。贝壳找房一般是需要上传身份证和房产证的,租客登录贝壳网站时,需要上传本人的身份证和填写个人基本信息,贝壳房地产公司网上平台也必须出示真实房源的房产证和... 查看详情