63. APP端特有的测试
参考:APP专项测试、APP应用测试
crash和anr的区别
1)网络测试
2)中断测试
3)安装、卸载测试
4)兼容测试
5)性能测试(耗电量、流量、内存、服务器端)
6)安全性测试(密码、sql注入、权限)
7)UI测试(横竖屏、手势、键盘等的自适应)
8)升级测试(考虑内存)
9)稳定性测试(使用monkey)
10)接口测试
11)其他测试(如上传文件、图片、视频)
64. 服务异常情况验证
65. 用什么做性能测试
66. Jmeter如何设计测试场景
67. 压测怎么做
69. UI自动化元素定位方法
参考:UI自动化元素定位
70. gpu和cpu有什么区别
71. gpu性能受哪些因素的影响
72. 共享内存,线程安全吗?怎么解决?
73. 什么情况下会发生死锁?怎么解决?
74. 进程上下文切换需要做哪些事情?上下文保存在哪里?
75. 单例模式怎么实现的?怎么判断一个实例是不是已经创建了呢?线程安全吗?加锁会有什么问题?怎么优化?
76. 视频静态解码和动态解码?
77. 逆层序遍历
78. 用户上传照片如何测试
79. 线上bug如何解决?完成处理流程?
80. 前端页面无法展示,如何找bug?
81. 服务端接口有问题怎么定位bug
82. 字符串数组最长公共子串
83. 如果UI经常变更,UI自动化怎么解决
① 对比较稳定的功能和模块设置自动化用例
84. 提一个bug需要写明什么
参考:提BUG的内容
测试环境、测试设备/型号、软件版本、bug错误类型、bug所属模块、重现概率、优先级、严重级别、复现步骤、预期结果、实际结果、日志、bug状态以及标题、bug解决人
85. 怎么保持redis数据的时效性
86. 接口实现与基类继承的差异
87. coding过程中什么才是符合标准的好代码
88. Java基本数据类型有哪些?自动装箱、拆箱?
89. 异常的分类?如何处理异常?
参考:异常的的分类以及处理
90. Mysql的索引如何实现?B+树的结构?是逻辑结构还是线性结构?分别介绍逻辑结构、线性结构的数据结构有哪些?
91. sql:一页数据20条记录,显示第五页的记录?
已知每页显示m条数据,求第n页显示的数据
提示: 关键是求每页的开始行索引
① 查询学生表,获取第n页数据的SQL语句:
select * from students limit (n-1)*m, m
② 一页数据20条记录,显示第五页的记录
select 8 from table limit (5-1)*20, 20;
92. 购物车下单功能需要进行哪些测试
93. 了解哪些排序算法?哪些排序算法效率高一些?时间复杂度如何?
94. 两个无序二叉树合并为有序二叉树
95. 贪心算法和动态规划的区别?
96. 分治思想和动态规划的区别
97. 线程资源以来死锁问题,如何避免?
98. IO多路复用
99. InnoDB的索引类型
100. MySQL的锁机制,悲观锁和乐观锁的区别
1)共享锁S和排他锁X
2)乐观锁一般是使用版本号来实现的,一般使用select … for update来实现悲观锁
101. sql:查询第50到100条数据
① 查询前100条数据
select * from A limit 0,100;
② 查询50-100条数据
select * from A limit 49,51;
select * from A limit s, n;
// s 表示起始位置,是不包含状态,也让就是说从s+1开始输出
// n 表示多少条数据
102. 依赖注入的方式
103. IOC和AOP的概念,IOC的实现机制
104. SpringBoot配置文件的加载顺序?yam和properties?
105. 讲一下collection和map
106. List和Set有什么区别?Set里面可以有null值吗?List是不是可以有多个null值
① 都继承自Collection接口
② null值
③ 重复值
④ 有序性
107. hashMap和hashTable有什么区别?Hash Map的底层原理?如何解决Hash冲突?
1)区别:
① 读写的线程安全
② null值的存储:map中key和value均可以是null,但是table中不允许存储null
2)哈希冲突避免:
哈希函数设计、负载因子调节
3)哈希冲突解决:
闭散列(线性探测,保存到下一个位置)、开散列(链表存储)
108. 一张表用a,b,c三个字段作为联合索引,一条sql语句命中了a和b是否会走索引?
参考:组合索引
组合索引 有“最左前缀”原则,遇到范围查询(>、<、between、like)就会停止匹配。
109. 基于TCP的协议
110. TLS握手过程
111. session和cookie
112. 页面置换算法LRU?还有其他的页面置换算法吗?
113. 介绍线程池以及对线程池的认识?
114. 哈希表与红黑树的认识?
115. 抽象类的使用场景
116. MySql的事务
117. 分布式锁
118. StringBuffer、StringBuilder为什么是可变的?
1)String:底层是char数组,数组是不可变长的;再者,数组是使用final修饰的,该引用不可以再指向其他对象
2)StringBuffer和StringBuilder:内部实际上是一个char[ ]数组,这个char[ ]数组没有被final修饰,StringBuffer和StringBulider的初始化容量应该为16,当存满之后会进行扩容,底层调用了数组拷贝的方法:System.arraycopy()…扩容的,所以StringBuffer/StringBuilder适用于字符串的频繁拼接操作,并且StringBuffer是线程安全的,StringBuilder是非线程安全的。(扩容机制:原数组大小*2+2)
119. 为什么TCP比UDP长一点?
① TCP 有可变长的「选项」字段,而 UDP 头部长度则是不会变化的。
② TCP是可靠传输的,其有三次握手和四次挥手,所需要使用的序列号以及确认号需要进行存储;另外,还有滑动窗口来进行流量控制等以保证数据的安全性
③ UDP的头部长度是不会改变的
120. Java怎么实现单例继承?手写线程安全的单例继承
1)定义:确保一个类只有一个实例,并提供该实例的全局访问点
2)设计要素:一个私有构造函数 (确保只能单例类自己创建实例)、一个私有静态变量 (确保只有一个实例)、一个公有静态函数 (给使用者提供调用方法)
3)类型:
① 懒汉:先不创建实例,当第一次被调用时,再创建实例,所以被称为懒汉式。
// 线程安全的懒汉模式
public class Singleton {
private static Singleton uniqueInstance;
private static singleton() {
}
public static synchronized Singleton getUinqueInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
② 饿汉: 先不管需不需要使用这个实例,直接先实例化好实例 (饿死鬼一样,所以称为饿汉式),然后当需要使用的时候,直接调方法就可以使用了。
public class Singleton {
private static Singleton uniqueInstance = new Singleton();
private Singleton() {
}
public static Singleton getUniqueInstance() {
return uniqueInstance;
}
}
③ 静态内部类
public class Singleton {
private Singleton() {
}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getUniqueInstance() {
return SingletonHolder.INSTANCE;
}
}
④双检查机制
public class MySingleton {
//使用volatile关键字保其可见性
volatile private static MySingleton instance = null;
private MySingleton(){}
public static MySingleton getInstance() {
try {
if(instance != null){//懒汉式
}else{
//创建实例之前可能会有一些准备性的耗时工作
Thread.sleep(300);
synchronized (MySingleton.class) {
if(instance == null){//二次检查
instance = new MySingleton();
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return instance;
}
}
4)使用场景
① 频繁实例化然后又销毁的对象,使用单例模式可以提高性能。
② 经常使用的对象,但实例化时耗费时间或者资源多,如数据库连接池,使用单例模式,可以提高性能,降低资源损坏。
③ 使用线程池之类的控制资源时,使用单例模式,可以方便资源之间的通信。
121. SpringBoot的关键注解? @SpringBootApplication是一个组合注解,是由哪些构成的?
参考:SpringBootAppication注解、SpringBootApplication注解02
SpringBoot注解
1)注解类型:
① 核心注解:@SpringBootApplication:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
② 常用注解:@Component、@Bean、@Import、@Autowired、@Configuration、@VAlue(注入 application.properties 或 application.yml 配置的属性的值)
2)@SpringBootApplication注解:
/**
* @SpringBootApplication组合注解包含以下注解:
*
* @Target(ElementType.TYPE) :用于描述注解的使用范围
* @Retention(RetentionPolicy.RUNTIME) :保留,指定保留时间,三个枚举,分别为source,class,runtime
* @Documented:可被javadoc等工具记录,注解类型信息会保存到生成的文档中
* @Inherited:个人认为是一个成员变量,父类被子类覆盖之后无法继承,子类中可以继承父类中未被覆盖的父类注解的值
* @SpringBootConfiguration:包含@Target(ElementType.TYPE)
* @Retention(RetentionPolicy.RUNTIME) :同上述
* @Documented:同上述
* @Configuration:用于配置,包含以下注解
* @Target(ElementType.TYPE) :同上述
* @Retention(RetentionPolicy.RUNTIME) :同上述
* @Documented :同上述
* @Component:spring内置组件注解,用途是让spring容器扫描
* @EnableAutoConfiguration:开启自动配置,包含以下注解
* @Target(ElementType.TYPE):同上述
* @Retention(RetentionPolicy.RUNTIME):同上述
* @Documented:同上述
* @Inherited:同上述
* @AutoConfigurationPackage:自动配置包含注解的类
* @Import(AutoConfigurationImportSelector.class)
* @ComponentScan:开启包扫描,默认扫描同级及当前包下内容,包含以下注解
* @Retention(RetentionPolicy.RUNTIME)
* @Target(ElementType.TYPE):同上述
* @Documented:同上述
* @Repeatable(ComponentScans.class):允许在同一申明类型(类,属性,或方法)的多次使用同一个注解
*/
@SpringBootApplication
122. 编程:给你两个线程,交替修改同一个变量10次?
参考:多线程交替打印
思路:其实这类问题本质上都是线程通信问题,思路基本上都是一个线程执行完毕,阻塞该线程,唤醒其他线程,按顺序执行下一个线程。
1)synchronized + wait/notifyAll
2)join()
3)Lock