JAVA面试题(一)

博主今年大三,找实习ing,开了这个新的专栏来记录Java面试题八股文,希望与大家共勉~~~

内容参考自牛客网Java面试题专栏

一、请你说说进程和线程的区别

进程和线程的主要区别在于它们是不同的操作系统资源管理方式。
1.进程有独立的地址空间,线程没有,但有自己的堆栈和局部变量;
2.进程和线程切换时,需要切换上下文,但是前者切换时间远大于后者,耗费资源较大,效率更差;
3.进程的并发性较低,线程的并发性较高。
4.每个独立的进程有一个程序运行的入口,顺序执行序列和程序的出口,但是线程不能独立运行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5.系统在运行时为每个进程分配不同的内存空间,而不会给线程分配内存,线程组之间共享内存;
6.一个进程崩溃后,在保护模式下不会对其他进程产生影响,但一个线程崩溃后整个进程都死掉,所以多进程要比多线程更健壮。

二、请你说说MySQL索引,以及他们的好处和坏处

索引就像指向表行的指针,是一种可以帮助快速查找数据的数据结构。常见的索引有:普通索引、唯一索引、主键索引、外键索引、全文索引、复合索引。
好处:
1.加速数据的检索速度;
2.减少查询语句的执行时间‘
3.优化表之间的关联操作。
坏处:
1.索引会占用磁盘空间;
2.建立索引会影响插入、更新、删除操作的执行时间;
3.索引不是万能的,需要根据实际情况进行选择和权衡。

三、请你说说多线程,以及为什么要使用多线程

线程是操作系统调度的最小单元,多线程是指在统一程序中,同时运行多个线程来执行不同的任务。使用多线程可以提高程序的并发性和效率。
使用多线程的原因:
1.提高程序的响应能力;
2.提高程序的处理能力;
3.充分利用CPU资源;
4.简化编程模型

四、请你说是死锁的定义以及发生的条件

死锁是指两个或两个以上的进程应争夺资源而无法继续执行。当出现死锁时,进程将永远阻塞。
产生死锁的条件:
1.互斥:资源不能被多个进程占用;
2.请求和保持:进程在申请新资源的同时保持对已有资源的占用;
3.不可抢占:已分配给一个进程的资源不能被其他进程抢占;
4.循环等待:多个进程之间形成一个循环等待关系,都在等待下一个进程所占用的资源

五、请你说说进程间的通信方式

进程间通信指不同进程之间传递数据或共享资源的方式。常见的通信方式如下:
1.管道:管道是一种半双工的通信方式,可以在父子进程、兄弟进程之间进行通信,但只能单向通信;
2.命名管道:命名管道是一种双向的通信方式,可以在不同进程之间进行通信;
3.信号量:信号量是一种用于进程之间同步的机制,主要用于控制访问共享资源的并发数;
4.消息队列:消息队列是一种可以实现进程间异步通信的机制,可以将多个消息放入一个队列中,进程之间通过读写队列中的消息实现通信;
5.共享内存:共享内存是一种高效的进程间通信方式,多个进程可以共享同一块物理内存,从而实现数据的快速传输和共享;
6.套接字:套接字是一种基于网络协议的通信方式,用于在不同的计算机或进程之间进行通信。

六、说说你对MVC的理解

MVC是一种软件架构模式,它将应用程序划分为三个部分:模型(Model)、视图(View)和控制器(Controller)。
其中,模型负责处理数据逻辑和业务规则;
视图负责处理数据的展示和呈现方式;
控制器负责协调模型和视图之间的交互,实现用户请求的处理和响应。
MVC模式的核心思想是将应用程序的不同部分进行分离,从而使得每个部分可以独立变更,提高了应用程序的可维护性和可扩展性。

七、StringBuffer类对象创建之后可以再修改和变动

A.正确
B.错误

选A
String,StringBuffer,StringBuilder,都实现了CharSequence接口。
String是个不可继承类(final修饰),也是个不可变类(内部char数组被final修饰)。
StringBuffer和StringBuilder内部都是一般的动态数组,所以可变。前者是线程安全的,因为方法基本都被synchronized修饰了

八、单例模式中,两个基本要点是()

A.构造函数私有
B.静态工厂方法
C.以上都不对
D.唯一实例

选AD
单例模式是一种常用的设计模式,它的基本要点如下:
唯一实例:单例模式要求一个类只能有一个实例存在,该实例由类自身创建并向外界提供访问。
私有构造函数:为了保证单例实例的唯一性,单例模式要求类中的构造函数必须是私有的,这样外部就无法通过构造函数来创建新的实例。

九、下面选项中,哪些是interface中合法方法定义?()

A.public void main(String [] args);
B.private int getSum();
C.boolean setFlag(Boolean [] test);
D.public float get(int x);

选ACD
Java程序的入口必须是static类型的,接口中不允许有static类型的方法。
A项没有static修饰符,可以作为普通的方法。
B项接口中的方法必须是public的。
C项中,接口中的方法默认是public的。
D项属于正常的方法。

十、有关线程的叙述正确的是()

A.可以获得对任何对象的互斥锁定
B.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定
C.线程通过使用synchronized关键字可获得对象的互斥锁定
D.线程调度算法是平台独立的

选CD
A选项不正确,线程只能获取到锁定了同步对象的锁。
B选项不正确,线程获取的是某个对象的锁,而不是类中方法的互斥锁定。
D线程调度分为协同式调度和抢占式调度,Java使用的是抢占式调度,也就是每个线程将由操作系统来分配执行时间,线程的切换不由线程本身来决定(协同式调度)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值