Java基础

来源:互联网 发布:玲珑加速器 知乎 编辑:程序博客网 时间:2024/06/14 06:00

基础

什么是值传递,什么是引用传递;

     值传递是将要传递的值作为一个副本传递给其他值:如int a=4; int b = a;     引用传递是引用对象的地址空间;Java中的数值传递是将数值赋给另一个对象,所以是一个值传递     而对象的实列是将对象的地址空间传递给引用对象,所以是一种引用传递

线程的状态有那些,他们是如何转化的;

状态图
1:线程的实现方式有两种,一种是通过继承Tread类,还有一种是实现Runnable接口,当我们new 这个对象后,我们的线程就进入到了初始化状态
2:当对象调用start方法时,线程就进入到可运行状态
3:当对象获取到了操作系统分配的cpu等资源时,就进入运行状态
4:运行状态说明:
4.1:当run方法或者main方法结束后,线程就进入到终止状态
4.2.当我们调用自身的sleep或者join方法时,这时线程就进入到阻塞状态(这时线程并不会释放资源),当时间到达时,线程进入到可运行状态,等待操作系统分配到cpu等资源后,线程又进入到运行状态
4.3:当线程调用yeid方法时,线程从新回到可运行状态,和其他线程一起竞争资源,这时的线程已经放弃了之前得到的资源
4.4:当线程执行时遇到synchronized(同步),这时线程如果获取不到锁,那么他会进入到锁池状态,这个锁池状态下如果还有其他的线程,那么会按照fifo的算法去得到锁,进入到可运行状态,这时如果获取到了cpu资源那么就进入到运行状态
4.5:当线程调用wait方法时。这时线程会进入到等待状态,(这时线程会释放所有的资源,和sleep不同),并且等待状态的线程不会自己开启,需要我们手动开启(调用notify方法或者notifyAll方法),notify方法只是随机将一个线程唤醒进入到锁池状态,所以我们一般都是调用notifyAll方法将所有的线程都唤醒,都进入到锁池状态,然后依次获取到锁,进入到可运行状态。

线程和进程的区别

具体来说就是:一个程序就是一个进程,而进程内部会有执行顺序,那么这些执行顺序流就是一个线程,
线程是操作系统分配资源的基本单位
优缺点:
进程有自己的独立地址空间,而进程没有自己的独立地址空间;
线程的开销小,不利于资源的保护和管理
线程适合在smp机器上运行,而进程可以跨机器

索引的作用及代价,如何建立索引,索引的原理

作用:
1:通过建立唯一性索引,可以保证数据库表中的每一行数据的唯一性
2:可以大大加快索引的速度
3:可以加快表与表之间的连接
4:可以加快分组和排序的速度
5:可以针对索引进行查询的优化
代价:
1:创建索引和维护索引需要额外的时间
2:索引的存在需要占用额外的物理空间,当数据量大了这时非常头疼的问题
3:索引库是动态维护的,所以crud操作过程中,降低了维护的速度
如何建立:
按照索引的唯一性可以分为:唯一性索引和非唯一性索引;非:B树索引
按照索引的个数可以分为:单例索引和复合索引;
create index 索引名 on 表名(列名) tablespace 表空间名;
alter index 索引名 rebuild
drop index 索引名
索引的原理:
普通的索引是维护了一个了一个二叉树

Hash算法

将任意长度的数值,进过散列算法输出为固定长度的数值    

锁:乐观锁和悲观锁

乐观锁:
每次去拿数据时,乐观的判断,别人不会修改数据,并且不会上锁,只是在更新数据时,才会判断,可以使用版本号来控制,乐观锁适用于多读的情况
悲观锁:每次拿数据的时候,都会悲观的认为别人会更新数据,所以每次拿数据都会给数据加上一个锁

什么情况下会产生死锁?如何避免死锁?

产生原因:资源的竞争和执行顺序的非法;
产生死锁的条件:互斥,不剥夺,请求与保持,循环等待

JVM GC:介绍垃圾回收机制,垃圾回收算法

垃圾回收机制就是Java虚拟机提供的回收垃圾所占的资源空间:首先gc通过垃圾收集器判断这个引用对象是否是一个垃圾,在通过相应的算法回收;
判断方法:java中通过引用来和对象进行关联,所以我们可以通过引用对象的计数来判断是否对象应该被回收,这个方法叫做引用计数法,
典型的垃圾回收算法:

标记-清除:

分为两个阶段:标记阶段和清除阶段,标记阶段就是标记需要清除的对象,而清除阶段就是对标记了的对象进行清除。

复制算法:

将内存划分为大小相同的两个块,当一块内存用完时,就会判断哪些对象还在使用,就将这些对象移动到另一个内存空间中。

标记-整理算法:

将存活的对象移动到一端,然后清除掉端边界以外的内存。

分代收集算法:

根据对象生命的存活周期,将内存分为新生代和老年代,新生代是回收大量的对象,二老年代只是回收少量的对象,新生代主要采用的算法是:复制算法,而老年代主要采用的算法是标记整理算法;

典型的垃圾收集器:

1:serial /serial old 单线程收集,必须暂停所有对的用户线程 serial针对新生代,seerial old针对老年代2:ParNew多线程的3:Parallel Scavenge  并行的新生代的4:Parallel Old  并行的老年代的5:CMS  获取最短停顿时间的收集器 6:G1  面向服务端的收集器,针对现在多核和多cpu的环境

JAVA的反射机制

对于任意一个类,都可以知道他的属性和方法,对于任意一个对象都可以调用他的方法,这种动态获取对象的信息和动态调用对象的方法的机制叫做反射 ;

Java集合类有哪些,分别在哪些场景使用

介绍

Linux下如何快速查找某个文件

whereis快速
find慢
locate需要使用update程序去更新数据库,支持模糊查询

Linux下如何查看TCP连接状态

ps -ef | grep 协议

简述一次HTTP请求的基本流程

建立tcp连接
web浏览器发送请求信息
web浏览器发送请求头信息
web服务器响应
web服务器响应请求头信息
web服务器发送数据
断开TCP连接

Get和Post的区别`

详解

IO和NIO的区别,NIO优点

io是面对流的,nio是面对缓冲区的
io是阻塞的,nio是非阻塞的
nio适合大规模并发操作,但是在比如大文件的上传和下载时,不适合nio

作业调度算法

先来先服务fcfs
短作业优先
响应比优先算法
优先数算法
定时轮转
事件驱动
各种搭配使用