试题

牧云@^-^@ 提交于 2020-03-27 03:29:55

讲一讲并行和并发

 

进程的线程的区别

 进程是资源分配的最小单位,线程是程序执行的最小单位。

进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

 进程间通信的有哪几种方式

管道(Pipe)及有名管道(named pipe):

信号量

共享内存

信号(Signal)

报文(Message)队列(消息队列)

套接字

 线程间资源可以共享吗,进程间呢

 

Java并发,说一说了解哪些,volatie个synchronized的

  volatile本质是告诉JVM当前变量在寄存器中的值是不确定的,需要从主存中读取。synchronized则是锁定当前变量,只有当前线程可以访问该变量,其它线程被阻塞。

  volatile仅能使用在变量级别,synchronized则可以使用在变量、方法。

  volatile仅能实现变量修改的可见性,而synchronized则可以保证变量修改的可见性和原子性。《Java编程思想》上说,定义long或double时,如果使用volatile关键字(简单的赋值与      返回操作),就会获得原子性。(常规状态下,这两个变量由于其长度,其操作不是原子的)

  volatile不会造成线程阻塞,synchronized会造成线程阻塞。

  使用volatile而不是synchronized的唯一安全情况是类中只有一个可变的域。

说一说抽象类和接口的区别,平时哪个使用最多

抽象类要被子类继承,接口要被类实现。

接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。

接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

接口是设计的结果,抽象类是重构的结果

抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。
 

 

Restful了解吗说一说Get和Post请求有什么区别

GET请求在URL中传送的参数是有长度限制的,而POST没有。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

GET参数通过URL传递,POST放在Request body中。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET产生的URL地址可以被Bookmark,而POST不可以。

GET在浏览器回退时是无害的,而POST会再次提交请求。

 ==和equals()区别

"=="是判断两个变量或实例是不是指向同一个内存空间。

"equals"是判断两个变量或实例所指向的内存空间的值是不是相同。

"equals"在JAVA中是一个方法。

"=="在JAVA中只是一个运算符合。

构造器是否可以被重写

构造器就是构造方法,能够被重载(同类中不同参数列表的构造器),不能够被重写(子类使用super方法可以调用)。

不能说能被继承,因为能够调用,但是不能重写

static修饰的变量内存中怎么存放

多态实现原理

Java 对于方法调用动态绑定的实现主要依赖于方法表,但通过类引用调用和接口引用调用的实现则有所不同。

总体而言,当某个方法被调用时,JVM 首先要查找相应的常量池,得到方法的符号引用,并查找调用类的方法表以确定该方法的直接引用,

最后才真正调用该方法。

springboot自动配置原理

spring的bean有哪几种生命周期

 

 

 

 

给定一个有序递增数据,一个值K,找到最先等于k的下标(不用遍历的方法做出来)

可重入锁怎么实现

TCP的特点与UDP区别?

 

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP首部开销20字节;UDP的首部开销小,只有8个字节

 

6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

 

单核单线程CPU是否可以运行多线程程序?多线程与CPU单线程区别(系统线程和用户线程)?

 

线程的状态

 

 

 

 

数据库如何保证事务的可串行化。

 

事物a 执行读写操作时,会锁定检索的数据行范围(范围锁),这种锁会阻止其他事物在本范围内的一切操作

 

只有事物a执行完毕,提交事物后,才会释放范围锁,这样就避免了幻读。

 

事务隔离级别有什么?通过什么来实现的?分别解决了什么问题?

Redis如何实现集群和高可用?redis分布式锁的加锁解锁详细实现?

 

 Redis和mysql区别是什么?有哪些持久化方式?区别呢?

你了解哪些收集器?CMS和G1。详细谈谈G1的优点

TCP如何保证可靠传输

TCP的流量控制,当接收方的接收窗口为0的时候该怎么办

TCP的拥塞控制(慢启动,拥塞避免,超时间间隔传输及其快速重传,快速恢复)

流量控制和拥塞控制有什么区别

HTTP状态码类型有哪些,及其作用

HTTP1.0 HTTP1.1 HTTP2.0,这三个有什么区别及其改进

1.0与1.1 :长连接 节约带宽  HOST域

1.1与2.0 多路复用  数据压缩 服务器推送

中断机制,isInterrupted和interrupted的区别,哪些状态可以中断并抛出InterruptedException

 

 

 intertrupte()在阻塞状态抛出异常,再补货后修改变量。

isinterrupted用来判断状态。

 

  • 进程是资源分配的最小单位,线程是程序执行的最小单位。

  • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

  • 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

  • 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!