双面:
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.