• 网易云音乐测开面试题整理


    一、自我介绍

    二、关于操作系统的一个问题,没看过,所以不记得了

    三、说说对测试开发的理解

    四、线程和进程的区别

    • 进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程,线程又叫做轻量级进程
    • 线程的划分小于进程,线程隶属于某个进程。进程是程序的一种动态形式,是CPU、内存等资源占用的基本单位,而线程是不能占有这些资源的。
    • 进程之间相互独立,通信比较困难,而线程之间共享一块内存区域,通信比较方便。进程在执行的过程中,包含比较固定的入口、执行顺序、出口,而线程的这些过程会被应用程序所控制

    五、线程的锁有哪几种方式

    • 同步代码块

              synchronized(对象) { 需要被同步的代码; }

              这里的锁对象可以是任意对象。

    • 同步方法:把同步加在方法上。这里的锁对象是this
    • 静态同步方法:把同步加在方法上。

    六、线程的状态

    1、新建( new ):新创建了一个线程对象。

    2、可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象的 start ()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取 cpu 的使用权 。

    3、运行( running ):可运行状态( runnable )的线程获得了cpu 时间片( timeslice ),执行程序代码。

    4、阻塞( block ):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice ,暂时停止运行。直到线程进入可运行( runnable )状态,才有机会再次获得cpu timeslice转到运行( running )状态。

    阻塞的情况分三种:

    (1)、等待阻塞:运行( running )的线程执行o . wait ()方法,JVM 会把该线程放入等待队列( waitting queue )中。

    (2)、同步阻塞:运行( running )的线程在获取对象的同步锁时,若该同步锁 被别的线程占用,则JVM会把该线程放入锁池( lock pool )中。

    (3)、其他阻塞: 运行( running )的线程执行Thread . sleep ( long ms )或t . join ()方法,或者发出了I / O 请求时,JVM 会把该线程置为阻塞状态。当sleep ()状态超时、join ()等待线程终止或者超时、或者I / O处理完毕时,线程重新转入可运行( runnable )状态。

    5、死亡( dead ):线程run ()、main () 方法执行结束,或者因异常退出了run ()方法,则该线程结束生命周期。死亡的线程不可再次复生

    七、MySQL相关

    1、建三张表

    手机表,手机ID,型号,厂商,损坏

    借用人表,借用人ID,名称,所属项目

    手机借用人关系表,手机ID,借用人ID,借用时间,状态(归还,使用),所属项目

    2、从表中查出某条数据

    从手机借用人关系表中查出用户A在使用中的手机

    八、手写代码

    1、输入一个字符串,找出第一第二个重复的字符

    package cn.itcast_01;
    /*
     * created by yinqanne in 2018/8/30
     */
    import java.util.HashMap;
    import java.util.Scanner;
    import java.util.Set;
    
    /*
     * 输入一个字符串,找出第一第二个重复的字符
     * 输入例子1:abcadfscdd
     * 输出例子1:a b
     */
    public class Test5 {
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            String string = sc.nextLine();
            int len = string.length();
            if(string==null || len < 2){
                System.out.println("输入错误,请输入字符长度大于1的字符串");
                return;
            }
            HashMap<String, Integer> map = new HashMap<>();
    
            int count = 0;
            for(int i = 0; i < len; i++){
                String s = String.valueOf(string.charAt(i));
                if(map.containsKey(s)){
                    map.put(s, map.get(s)+1);
                }else{
                    map.put(s, 1);
                }
            }
            Set<String> keyset = map.keySet();
            count = 0;
            for(String s: keyset ){
                if(map.get(s) > 1 && count < 2){
                    System.out.println(s);
                    count++;
                }else{
                    return;
                }
            }
        }
    }

     2、针对以上代码写一个测试用例

  • 相关阅读:
    Reactive(1) 从响应式编程到"好莱坞"
    [动图演示]Redis 持久化 RDB/AOF 详解与实践
    补习系列(22)-全面解读 Spring Profile 的用法
    Android手机打造你的Python&Java开发工具!
    人工神经网络模型种类
    最小二乘拟合
    LDA主体模型
    Logistic Regression求解classification问题
    batch gradient descent(批量梯度下降) 和 stochastic gradient descent(随机梯度下降)
    SVM实验
  • 原文地址:https://www.cnblogs.com/yinqanne/p/9558256.html
Copyright © 2020-2023  润新知