大家好,我是小林。
最近有一些同学看到很多大厂都开了春招实习,但是自己准备的比较晚,比较着急,问我有什么快速突击的办法?
如果之前基础薄弱的情况下,突击 1-2 个月也比较难进大厂的后端的,因为有些底层知识原理,得花时间慢慢啃,不然一问三不知,就寄了。
不过可以另辟蹊径,不卷后端,尝试一下测试开发的岗位。
测开的面试相比后端简单很多,而且投的人不算多,没有后端卷,获得面试机会的概率更高一些。
在互联网大厂的校招中,测试开发的薪资实际上和后端开的是一样的,比如普通档的大厂 offer,都是 22k*16(年薪 35w+)。
测试开发岗会伴随开发+测试类的工作,开发主要是开发一些测试工具来提高测试效率,也会和根据业务团队的需求开发一些工具。
测试开发的面试其实跟后端开发差不多,其实被问的问题不会太细节或者太底层,除此后端的内容之外,还会考察一些测试相关的内容。
比如,如何设计测试用例、黑盒测试和白盒测试有什么区别、手动测试和自动测试有什么区别、api 测试工具怎么用等等。
甚至也会问,为什么要选择做测试开发等之类的问题, 同学们在投递测开岗位的时候,最好提前准备下测试相关的问题。
今天分享2位同学大厂测开的校招面试:快手和滴滴的测开面经。
虽然也会有算法题,但是整体的八股和算法的难度确实会比后端减少了很多,是一个弯道超车进大厂的机会,给想准备测开同学做一个参考。
增加(Insert):用于向数据库表中插入新的数据记录。
删除(Delete):用于从数据库表中删除符合指定条件的数据记录。
修改(Update):用于更新数据库表中符合指定条件的数据记录。
查询(Select):用于从数据库表中检索数据记录。
数据存储方式:
数据类型:
持久化:
应用场景:
TCP协议主要通过以下几点来保证传输可靠性:连接管理、序列号、确认应答、超时重传、流量控制、拥塞控制。
测试用例1 - 点赞功能正常使用:
测试用例2 - 取消点赞功能:
测试用例3 - 多用户同时点赞:
测试用例4 - 点赞数上限限制:
测试用例5 - 点赞数据同步:
测试用例6 - 点赞功能异常处理:
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public class LinkedListDeletion {
public ListNode deleteNode(ListNode head, int val) {
if (head == null) {
return null;
}
if (head.val == val) {
return head.next;
}
ListNode prev = head;
ListNode curr = head.next;
while (curr != null) {
if (curr.val == val) {
prev.next = curr.next;
break;
}
prev = curr;
curr = curr.next;
}
return head;
}
}
了解,redis属于NoSQL数据库的一种,它主要用来作为缓存、分布式锁、消息中间件等多种用途。
数据存储在内存中,读写速度非常快,支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。
SQL数据库,指关系型数据库 - 主要代表:SQL Server,Oracle,MySQL(开源),PostgreSQL(开源)。
关系型数据库存储结构化数据。这些数据逻辑上以行列二维表的形式存在,每一列代表数据的一种属性,每一行代表一个数据实体。
图片
NoSQL指非关系型数据库 ,主要代表:MongoDB,Redis。NoSQL 数据库逻辑上提供了不同于二维表的存储方式,存储方式可以是JSON文档、哈希表或者其他方式。
图片
选择 SQL vs NoSQL,考虑以下因素。
ACID vs BASE
关系型数据库支持 ACID 即原子性,一致性,隔离性和持续性。相对而言,NoSQL 采用更宽松的模型 BASE , 即基本可用,软状态和最终一致性。
从实用的角度出发,我们需要考虑对于面对的应用场景,ACID 是否是必须的。比如银行应用就必须保证 ACID,否则一笔钱可能被使用两次;又比如社交软件不必保证 ACID,因为一条状态的更新对于所有用户读取先后时间有数秒不同并不影响使用。
对于需要保证 ACID 的应用,我们可以优先考虑 SQL。反之则可以优先考虑 NoSQL。
扩展性对比
NoSQL数据之间无关系,这样就非常容易扩展,也无形之间,在架构的层面上带来了可扩展的能力。比如 redis 自带主从复制模式、哨兵模式、切片集群模式。
相反关系型数据库的数据之间存在关联性,水平扩展较难 ,需要解决跨服务器 JOIN,分布式事务等问题。
SELECT MAX(score) FROM grades;
public int binarySearch(int[] arr, int target) {
int low = 0;
int high = arr.length - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1; // target not found
}