首页 > 编程知识 正文

测试开发工程师面试题库,系统测试工程师面试常见问题

时间:2023-05-05 13:48:38 阅读:161840 作者:2694

双面:

1、线程和进程有什么区别?

(一)进程和线程

摘要:大多数操作系统支持执行多个任务。 通常,一个任务是一个程序,一个程序是一个进程。 当一个进程运行时,它的内部可能包含多个序列执行流,每个序列执行流都是一个线程。

过程:过程是指正在运行的程序,具有一定的独立功能。 进程是系统分配和调度资源的单元。 程序进入内存执行后,就是进程。

线程:

线程是进程的一部分,一个进程可以有多个线程,一个线程必须有父进程。 线程可以有自己的堆栈、自己的程序计数器和自己的局部变量,但不能有系统资源。 与父进程的其他线程共享进程的所有资源。

线程特征:

线程可以完成一定的任务,可以与其他线程共享父进程的共享变量和部分环境,相互配合完成任务。

线程是独立运行的,不知道进程中是否存在其他线程。

线程的执行是抢占式的。 这意味着当前正在运行的线程可能随时被挂起以执行另一个线程。

一个线程可以创建或撤消另一个线程,一个进程中的多个线程可以同时执行

二.创建和使用线程

通过继承方案Thread类创建线程类

步骤定义Thread类的子类,并重写该类的Run方法。 该Run方法的方法主体表示该线程需要完成的任务

创建Thread类的实例。 创建线程对象

调用线程的start方法启动线程

publicclassthreadtestextendsthread {

私有输入I;

@Override

重写公共void run ()//run方法

for(intI=0; i 10; I ) {

//获取当前正在运行的线程的名称

system.out.println(getname () () ) (t ) I );

}

}

}

公共类测试{

publicstaticvoidmain (string [ ] args ) {

for(intI=0; i 10; I ) {

System.out.println (调用线程(Thread.currentThread ) ).getName ) (t ) I );

if(I==5) {

ThreadTest t1=new ThreadTest (;

ThreadTest t2=new ThreadTest (;

//打开线程

t1.start (;

t2.start (;

}

}

}

}

实现方案Runnable接口

定义Runnable接口的实现类并重写其Run方法。 Run方法也同样是该线程的执行体!

创建Runnable实现类的一个实例,并将该实例作为Thread的目标来创建Thread对象。 这个Thread对象才是真正的线程对象。

publicclasstwothreadimplementsrunnable {

@Override

公共语音运行(}

for(intI=0; i 10; I ) {

System.out.println (调用线程(Thread.currentThread ) ).getName ) (t ) I );

if(I==10 ) )。

system.out.println (thread.current thread ().getName (执行完毕) );

}

}

}

2、打开url,发生了什么?

基本概念:要打开网站,必须首先在浏览器地址的URL输入框架中输入网址。 回车后,使用HTTP协议将URL传输到域名服务器,域名服务器根据URL查找相应的IP主机(系统服务器)。 这个过程称为request,即请求; 当IP主机收到请求时,将相应的资源返回给用户浏览器。 这个过程称为响应。

用户浏览器向系统服务器请求时,有几种方法,但最常用的方法有GET和POST两种。

3、http的要求方式?

get和开机自检的区别

  
区别:

    
get请求无消息体,只能携带少量数据

    
post请求有消息体,可以携带大量数据

  
携带数据的方式:

    
get请求将数据放在url地址中

     
post请求将数据放在消息体中

GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中; 

GET方式提交的数据最多只能有1024字节,而POST则没有此限制。 

4、http协议工作过程?
     一次HTTP操作称为一个事务,其工作整个过程如下:
     1 ) 、地址解析

     如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm

     从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
     协议名:http
     主机名:localhost.com
     端口:8080
     对象路径:/index.htm

      在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。

    2)、封装HTTP请求数据包

     把以上部分结合本机自己的信息,封装成一个HTTP请求数据包

     3)封装成TCP包,建立TCP连接(TCP的三次握手)

       在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口

     4)客户机发送请求命令

       建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。

     5)服务器响应

     服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

        实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

     6)服务器关闭TCP连接

     一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码

    Connection:keep-alive

   TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

5、代码实现二叉树的高度(自己建树)

6、长连接,短连接,http1.0 http1.1。
http协议过程:
一次完整的请求过程:

  
(1)域名解析

  
(2)建立TCP连接,三次握手

  
(3)Web浏览器向Web服务端发送HTTP请求报文

  
(4)服务器响应HTTP请求

  
(5)浏览器解析HTML代码,并请求HTML代码中的资源(JS,CSS,图片)(这是自动向服务器请求下载的)

  
(6)浏览器对页面进行渲染呈现给客户

  
(7)断开TCP连接
HTTP 1.1在继承了HTTP 1.0优点的基础上,也克服了HTTP 1.0的性能问题

8、描述socket通信过程,每个函数。

9、解释抓包和构造包的过程。

10、i++和++i哪个效率高,有什么区别。
i++是先把i的值拿来用,然后在自增1
++i是想把i自增1然后拿来用
内建数据类型的情况,效率没有区别。
自定义数据类型的情况,++i效率较高。

12、线程间的同步方式。
13、扑克牌洗牌算法(提示用队列实现)

14、java/C++内存管理方式。

15、列举STL容器,解释vector和list.
 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。