测试开发工程师面试总结(一)——Java基础篇

2023-11-16

本文面向对象:测试开发工程师(服务端自动化方向)。
随手百度一下都能找到**岗位面试总结,但是有关测开岗位的面试总结却寥寥无几。总体原因可能是这两个:
1 测试行业整体水平参差不齐,导致不同公司面试的问题不能抽象出来写概览。
2 很多做测开的人可能内心对这个行业缺少热爱,所以不爱去写。
在找工作的过程中发现测开被问到的非常杂,涵盖了Python/Java基础(我平时使用Java语言较多)、算法、测试基础、Linux基本命令、测试工具selenium等。现在把以上五个方面分五篇总结。

Java基础

  1. 最基础的是问到Java的基本类型,引用类型
    基本类型一共有八种,六种数字类型(四个整数型两个浮点型),一种字符类型,还有一种布尔型,整数型包括byte 8位 short 16位 int 32位 long64位,字符型即char 16位的Unicode字符 ,布尔型表示一位的信息。引用类型指向一个对象,指向对象的变量就是引用变量。对象 数组都是引用类型。
  2. 字符串string类和stringbuffer的区别也是经常考查到的点
    String类是不可变的,如果对字符串进行修改,需要使用StringBuffer和StringBuilder。StringBuffer是线程安全的,StringBuilder在Java5中被提出,她相较于StringBuffer有速度优势但是是线程不安全的(记忆方式:builder按照字母排序排在buffer后面,虽然线程不安全但是访问速度快)。

3.一般面试官问到线程安全问题都会把多线程、线程同步、线程安全等考虑进来,我们一个个来说
多线程
线程:线程是指进程中一个单一顺序的控制流。一个进程可以并发多个线程。每条线程执行不同的任务。
线程创建的方法
线程创建的几种方法:
1,继承Thread类并重写run方法
2,采用实现Runnable接口创建多线程,3,通过Callable和Future创建线程。
深入问的话会问到两种情况:
1 多线程具体是如何实现的,继承Thread类并创建一个该类的实例并重写run方法,该方法是新线程的入口,同时也必须调用start()方法执行,执行顺序是creating thread -> start thread -> running thread. 实现runnable接口来创建多线程的顺序也是类似。
2实现Runnable接口和使用Callable接口的相似之处、不同之处:
Callable接口类似于Runnalble,都是为了实例可能被另一个线程所执行的类而设计;
不同点:1. Callable可以截获异常并有返回值 2.Callable需要依赖FutureTask实现。
线程同步实现的几种方式
多线程会导致线程不安全问题出现,也就是说多个线程并发执行并操作同一可同享的资源变量时可能会导致数据不一致的情况(常见的卖票的情况),因此需要线程同步,线程同步实现的方式有以下几种:
一、使用synchronized关键字修饰方法:

public static synchronized void save(){}

注:使用static表示要锁住 整个类
二、同步代码块synchronized(Object object ){}

/**
*使用同步代码块实现方法
**/
public void save(int money){
synchronized(this){
   account+=money;
}
}

三、 使用volatile关键字实现同步
volatile比较特殊,首先,它为域变量的访问提供了一种免锁机制,使用volatile修饰相当于高速虚拟机该域可能会被其他线程更新,因为每次使用该域要重新计算,而不是使用寄存器中的值。volatile不能保证变量的原子性,所以一般不会用在频繁写操作中。
(volatile关键字的原理很可能会被问到,即volatile不用锁是怎么实现同步的:原理是每次要线程要访问volatile修饰的变量时都是从内存中读取,而不是存缓存当中读取,因此每个线程访问到的变量值都是一样的。这样就保证了同步。)


class Bank{
  private volatile int account=100;  
  public void save(int money){
	account+=money;
  }
}

四、使用重入锁实现线程同步
Java5之后新增了concurrent包支持同步,R恩恩突然跳Lock类可重入、互斥、实现了Lock接口的锁,其使用方法见代码:

/**
*ReenreantLock类的常用方法:创建一个ReentrantLock实例 *lock() : 获得锁 unlock() : 释放锁 
**/
class Bank{
  private int account=100;
  private Lock lock=new ReentrantLock();
  public int getAccount(){
     return account;
 }
 public void save(int money){
	lock.lock();
	try{
       account+=money;
  }finally{
      lock.unlock();
  }
}
}

五、使用局部变量ThreadLocal实现线程同步
ThreadLocal的原理:如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。现在明白了吧,原来每个线程运行的都是一个副本,也就是说存钱和取钱是两个账户,只是名字相同而已。所以就会发生上面的效果。

class Bank{
 private static private static ThreadLocal<Integer> count = new ThreadLocal<Integer>(){  
        @Override  
        protected Integer initialValue() {  
            // TODO Auto-generated method stub  
            return 0;  
        }  
          
    };  
  public void save(int money){
	account+=money;
  }
}

线程的几种状态
线程的生命周期包含:新建状态/就绪状态/运行状态/阻塞状态/死亡状态。其中阻塞状态可以分为三种:等待阻塞 运行状态中的线程执行wait()方法,使线程进入到等待阻塞;同步阻塞 线程获取synchronized同步锁失败,同步锁被其他线程占用;其他阻塞 调用线程的sleep()或join()发出I/O请求时,线程进入到阻塞状态。sleep()超时活着join()等待线程终止或者超时,或者I/O处理完毕,线程重新转入就绪状态。
4.输入输出流io考点
有哪些常用的输入输出流
举例 字节流 字符流 字节流:InputStream OutputStream 字符流:Reader Writer
流按照传输方向可以分为哪些
输入输出是相对程序而言,输入流InputStream读入文件;输出流OutputStream写文件。
常用的io流
InputStream,OutputStream,
FileInputStream,FileOutputStream,
BufferedInputStream,BufferedOutputStream
Reader,Writer
BufferedReader,BufferedWriter
例:结合多线程和输入输出流,开启三个线程同时读取A B C文件,并且写入D文件(考虑线程同步的情况)。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试开发工程师面试总结(一)——Java基础篇 的相关文章

随机推荐

  • Selenium+PhantomJS使用时报错原因及解决方案

    问题 今天在使用selenium PhantomJS动态抓取网页时 出现如下报错信息 UserWarning Selenium support for PhantomJS has been deprecated please use hea
  • 异常处理UncaughtExceptionHandler

    自动捕获未知异常的主要思路是 在Application注册一个实现了UncaughtExceptionHandler的对象 然后在该对象中调用方法Thread setDefaultUncaughtExceptionHandler设置未知异常
  • [一步一步学react系列] 03—计数器V1.0

    前言 在上文中我们学习了react的工作流程 知道了用户点击操作先是分发action 然后reducer根据接收到的action来做具体值的改变的这个曲折过程 仔细看redux工作流的盆友一定发现了 上文中并没有用到最中心的store 那么
  • C语言基础-08 字符数组、字符串

    目录 一 定义字符数组 二 字符数组的初始化 三 字符串和字符串结束标志 四 字符数组的输入输出 五 使用字符串处理函数 1 输出字符串的函数 2 输入字符串的数组 六 数组中常用的字符串函数 1 strlen 2 strcat strnc
  • Java:注意事项集合

    回车与换行的区别 CRLF CR LF详解 r n r n的区别 https blog csdn net lishuoboy article details 84768748 java中String的格式化format 方法https bl
  • webtrc 中VideoAdapter类中的作用及局限

    需求 文章目录 需求 VideoAdapter类 分辨率的适配 帧率的适配 局限 在媒体库中 是要求能动态改变编码的分辨率和帧率的 思路是重启编码器 设置编码器新的分辨率 帧率参数来满足要求 所以输入到编码器中的视频流分辨率 帧率应该与设置
  • shell 脚本学习之一 ------let,echo,变量

    首先看到好多以这样开头的 bin bash 这个是告诉系统 解释此脚本文件的Shell程序 这个是注释行 当行有效 脚本程序一般用 xx sh 文件表示 这样一样就可以看出文件的属性 当然也可以不这样 一个脚本程序写完后 如果要执行它 则必
  • html自动填充高度,div 自适应高度,自动填充剩余高度

    方案1 头部 下部 样式 html body height 100 padding 0 margin 0 outer height 100 padding 100px 0 0 box sizing border box position r
  • JAVA知识点-BeanUtils.copyProperties() 用法

    本文为转载文章 转载地址 https www cnblogs com ahri gx p 10551340 html 文章只做学习交流使用 欢迎指正 2022 08 10更新 至于谁赋值给谁 看你导的包 package org spring
  • 二叉链表之寻找两节点的最近公共祖先☆

    题目 p q分别为指向该二叉树中任意两个节点的指针 试编写算法ancestor root p q r 找到p q的最近公共祖先节点r 分析 上一道题其实可以给我们一些启示 就是我们可以将任意节点的祖先存起来 那这里我们也可以用两个栈 分别将
  • Column 2 has an invalid name and/or length

    不要和我说你不认识英文 哈哈 不认识英文就去学 https archive sap com discussions thread 3878660 Hello I just got an SAP incident which looks si
  • python爬虫简单js逆向

    python爬虫简单js逆向案例 内容简介 一 找到包含所需数据的ajax数据包 二 通过浏览器工具进行关键字定位 三 分析相关js文件 找出具体实现方式 1 getApiKey 函数 2 encryptApiKey 函数 3 encryp
  • jsp中标签id和name的区别

    name原来是为了标识之用 但是现在根据规范 都建议用id来标识元素 但是name在以下用途是不能替代的 1 表单 form 的控件名 提交的数据都用控件的name而不是id来控制 因为有许多name会同时对应多个控件 比如checkbox
  • 二十、线程安全

    文章目录 一 线程安全 一 概念 二 线程安全之临界资源 三 线程安全之可重入函数 1 基本概念 2 实例 二 线程和fork 一 fork后子进程线程数量 二 fork后子进程锁的处理 一 线程安全 一 概念 线程安全 就是在多线程运行的
  • 【Locomotor运动模块】抓取:按朝向抓取(Orientation Handler)案例

    文章目录 案例 原理 案例 左右手柄抓宝剑时 宝剑的朝向不同 L35 一个手柄对应一个抓取点 原理 1 左右手柄分别抓取的是宝剑上的不同抓取点 GenericOrientation Handle通用朝向把手 它是我们设置 按朝向抓取 Ori
  • 11月1日任务

    11月1日任务 10 32 10 33 rsync通过服务同步 10 34 linux系统日志 10 35 screen工具 扩展 1 Linux日志文件总管logrotate http linux cn article 4126 1 ht
  • L2TP详解(二)

    今天继续给大家介绍HCIE安全 本文给大家介绍的是L2TP相关内容 包括L2TP的特点和应用场景 强烈推荐阅读本文前置文章 L2TP详解 一 一 L2TP隧道和会话建立过程 在LAC和LNS之间存在着两种类型的链接 隧道链接和会话链接 隧道
  • 很详细的系列Shell基础— Shell简介

    一 Shell的由来 我们比较熟悉Windows系统的图形化界面 对于图形界面来说 用户点击某个图标就能启动某个程序 在此之前我们一直在使用Linux系统的命令行模式学习 对于命令行来说 用户输入一个命令就能启动某个程序 这两者的基本过程都
  • 图解CRM(客户关系管理)全流程

    在不同场合下 CRM 客户关系管理 可能是一个管理学术语 也可能是一个软件系统 我们通常所指的CRM 指用计算机自动化分析销售 市场营销 客户服务以及应用等流程的软件系统 通俗地说 CRM就是利用软件 硬件和网络技术 为企业建立一个客户信息
  • 测试开发工程师面试总结(一)——Java基础篇

    本文面向对象 测试开发工程师 服务端自动化方向 随手百度一下都能找到 岗位面试总结 但是有关测开岗位的面试总结却寥寥无几 总体原因可能是这两个 1 测试行业整体水平参差不齐 导致不同公司面试的问题不能抽象出来写概览 2 很多做测开的人可能内