小猫的java基础知识点汇总(下)

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

进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。

不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。

2、如何在Java中实现线程?

继承Thread类
class Handler extends Thread{public void run(){//方法重写}public static void main(String[] args){Thread thread = new Handler();//创建线程对象thread.start();//启动线程}
}
实现Runnable接口
class Handler implements Runnable{public void run(){//方法实现}public static void main(String[] args){Handler handler = new Handler();Thread thread = new Thread(handler);//创建线程对象thread.start();//启动线程}
}

3、Java 关键字volatile 与 synchronized 作用与区别?

    1,volatile
    它所修饰的变量不保留拷贝,直接访问主内存中的。
在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器)。

为了性能,一个线程会在自己的memory中保持要访问的变量的副本。这样就会出现同一个变 量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory中的值,或者main memory中的值不一致的情况。 

一个变量声明为volatile,就意味着这个变量是随时会被其他线程修改的,因此不能将它cache在线程memory中。
    2,synchronized

当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。

一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。

二、当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。

三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有synchronized(this)同步代码块的访问将被阻塞。

4、线程生命周期?

新建一个线程时,它的状态是New。当我们调用线程的start()方法时,状态被改变为Runnable。线程调度器会为Runnable线程池中的线程分配CPU时间并且将它们的状态改变为Running。其他的线程状态还有Waiting,Blocked 和Dead

5、死锁?

指多个进程在运行过程中因争夺资源而造成的一种僵局,当处于这种状态时,若无外力作用,它们都将无法再向前推进。

原因可归结为两点:竞争资源、 进程间推进顺序非法
产生死锁的必要条件:

互斥条件:在一段时间内某资源仅为一进程所占用。
请求和保持条件:对已获得的资源保持不放。
不剥夺条件:已获得的资源只能由自己释放。
环路等待条件:存在一个进程--资源的环形链。

6、什么是线程池? 为什么要使用它?

创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。

线程池实现了线程重复利用,节约了时间和资源。

// Java线程池的完整构造函数
public ThreadPoolExecutor(int corePoolSize, // 线程池长期维持的线程数,即使线程处于Idle状态,也不会回收。int maximumPoolSize, // 线程数的上限long keepAliveTime, TimeUnit unit, // 超过corePoolSize的线程的idle时长,// 超过这个时间,多余的线程会被回收。BlockingQueue<Runnable> workQueue, // 任务的排队队列ThreadFactory threadFactory, // 新线程的产生方式RejectedExecutionHandler handler) // 拒绝策略

7、反射?

JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

8、JDK 、 JRE 、JVM有什么区别和联系?

JVM : Java 虚拟机。能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心。

JRE :Java 运行时环境。包含两个部分,jvm和 Java 的一些基本类库。

JDK :Java 开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。

这三者的关系是:一层层的嵌套关系。JDK>JRE>JVM。

9、深拷贝浅拷贝

      数据类型分为两种基础类型和引用类型:

基础类型:像Number、String、Boolean等这种为基本类型
引用类型:Object和Array

浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,修改其中任意的值,另一个值会随之变化

深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变。

10、JVM内存分为哪几部分?各个部分的作用是什么?

JVM内存区域分为五个部分,分别是堆,方法区,虚拟机栈,本地方法栈,程序计数器。


1)堆。

堆是Java对象的存储区域,任何用new字段分配的Java对象实例和数组。
2)方法区。

它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据,方法区,从JDK1.8永久代被移除。
3)虚拟机栈。

虚拟机栈中执行每个方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
4)本地方法栈。

与虚拟机栈发挥的作用相似,相比于虚拟机栈为Java方法服务,本地方法栈为虚拟机使用的Native方法服务,执行每个本地方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
5)程序计数器。

指示Java虚拟机下一条需要执行的字节码指令。

总:其中方法区和堆被JVM中多个线程共享,比如类的静态常量就被存放在方法区,供类对象之间共享,虚拟机栈,本地方法栈,pc寄存器是每个线程独立拥有的,不会与其他线程共享。

11、为什么会出现4.0-3.6=0.40000001这种现象?

2进制的小数无法精确的表达10进制小数,在计算10进制小数的过程中要先转换为2进制进行计算,这个过程中出现误差。

12、“==”比较的是什么?

“==”两边是对象,比较地址。

“==”两边是基本类型,比较数值。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无数踩坑系列(3)-配置pytorch

配置pytorch环境1. 命令一键式安装2.源码安装问题1问题2问题3问题43.克隆一个已有环境&#xff0c;带pytorch4.GPU驱动版本不对在实际开发中&#xff0c;想要在自己的机子上跑别人的代码&#xff1b;或者&#xff0c;在新的机子上跑自己的代码&#xff0c;总是面临着环境配置的…

小猫的java基础知识点汇总(上)

1、一个".java"源文件中是否可以包括多个类&#xff08;不是内部类&#xff09;&#xff1f;有什么限制&#xff1f; 可以有多个类&#xff0c;但只能有一个public的类&#xff0c;并且public的类名必须与文件名相一致。 2、short s1 1; s1 s11; 有没有错&#xff…

机器学习算法分类总结

机器学习方法分类总结 这篇文章只是一个类似于知识概括的文章&#xff0c;主要作用是帮忙梳理&#xff1a; 1) 分类 贝叶斯模型&#xff08;Bayesian Mode&#xff09; - 朴素贝叶斯算法&#xff08;Naive Bayesian Mode&#xff09; - 平均单依赖估计&#xff08;AveragedO…

无限踩坑系列(5)-MySQLdb

MySQLdb在Python2.x 时使用的是MySQLdbpython3中这个库已经不再使用了&#xff0c;所有的功能都由pymysql或mysqlclient替代。所以 想在python3中配MySQLdb真是一个深的不能再深的坑了。下面记录了愚蠢的填坑过程&#xff0c;仅做有类似错误的参考。参考文档&#xff1a;https:…

后端 分页组件实例

/*** 分页相关信息*/ public class Page {//当前页码private int current1;//显示的上限private int limit10;//数据总数//用于计算页数private int rows;//路径private String path;public int getCurrent() {return current;}public void setCurrent(int current) {if (curre…

大数据学习(07)--MapReduce

文章目录目录1.MapReduce介绍1.1 什么是分布式并行编程&#xff1f;1.2 MapReduce模型介绍1.3 map和reduce函数2.MapReduce体系架构3.MapReduce工作流程3.1 概述3.2 MapReduce各个阶段介绍3.3 shuffle过程介绍3.3.1 shuffle过程简介3.3.2 map中的shuffle过程3.3.3 reduce中的sh…

关闭用playsound函数的WAV文件

播放声音文件 PlaySound函数应用 1.关闭用playsound函数的WAV文件 PlaySound(0,NULL,0);即可 // test2.cpp : Defines the entry point for the application.//#include "stdafx.h"#include <mmsystem.h>int APIENTRY WinMain(HINSTANCE hInstance, …

身份验证

传统身份验证的方法 HTTP 是一种没有状态的协议&#xff0c;也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端&#xff0c;客户端使用用户名还有密码通过了身份验证&#xff0c;不过下回这个客户端再发送请求时候&#xff0c;还得再验证一下。 解决的方法就是&…

Pytorch(4)-模型保存-载入-eval()

模型保存与提取1. 整个模型 保存-载入2. 仅模型参数 保存-载入3. GPU/CPU模型保存与导入4. net.eval()--固定模型随机项神经网络模型在线训练完之后需要保存下来&#xff0c;以便下次使用时可以直接导入已经训练好的模型。pytorch 提供两种方式保存模型:方式1&#xff1a;保存整…

大数据学习(08)--Hadoop中的数据仓库Hive

文章目录目录1.什么是数据仓库&#xff1f;1.1数据仓库概念1.2传统数据仓库面临的挑战1.3 Hive介绍1.4 Hive与传统数据库的对比1.5 Hive在企业中的部署与应用2.Hive系统架构3.Hive工作原理3.1 SQL转换为MapReduce作业的基本原理3.2 Hive中SQL查询转换MapReduce作业的过程4.Hive…

dubbo知识点总结 持续更新

Dubbo 支持哪些协议&#xff0c;每种协议的应用场景&#xff0c;优缺点&#xff1f;  dubbo&#xff1a; 单一长连接和 NIO 异步通讯&#xff0c;适合大并发小数据量的服务调用&#xff0c; 以及消费者远大于提供者。传输协议 TCP&#xff0c;异步&#xff0c;Hessian 序列化…

使用Linux auto Makefile自动生成的运行步骤

首先创建一个 Linux Makefile.am.这一步是创建Linux Makefile很重要的一步&#xff0c;automake要用的脚本配置文件是Linux Makefile.am&#xff0c;用户需要自己创建相应的文件。之后&#xff0c;automake工具转换成Linux Makefile.in。AD&#xff1a; 在向大家详细介绍Linux …

无限踩坑系列(6)-mySQL数据库链接错误

mySQL数据库链接错误错误1错误2长链接短连接应用场景需要一直访问mySQL数据库&#xff0c;遇到如下错误&#xff1a;错误1 释放已经释放的数据库链接conn.&#xff0c;或者&#xff0c;操作已经释放的数据库链接conn.或者失去链接后再操作数据库都可能会报这个错误 aise err.I…

初探函数式编程和面对对象式编程

文章目录目录1.函数式编程和面向对象编程概念1.1 函数式编程1.2 面向对象编程2.函数式编程和面向对象编程的优缺点2.1 函数式编程优点缺点2.2 面对对象编程优点缺点3.为什么在并行计算中函数式编程比较好3.1 什么是并行计算3.2 函数式编程兴起原因目录 1.函数式编程和面向对象…

linux常用解压和压缩文件的命令

linux常用解压和压缩文件的命令 .tar 解包&#xff1a;tar xvf FileName.tar打包&#xff1a;tar cvf FileName.tar DirName&#xff08;注&#xff1a;tar是打包&#xff0c;不是压缩&#xff01;&#xff09;———————————————.gz解压1&#xff1a;gunzip FileN…

Python外(4)-读写mat文件

读写mat文件1.读取2.写入.mat 是matlab中数据存储的标准格式&#xff0c;Python中能够通过库scipy读取和保存。导入scipy库 from scipy import io 1.读取 io.loadmat(file_name, mdictNone, appendmatTrue, **kwargs) 简便方式&#xff1a; io.loadmat(file_name) append mat–…

Linux下的xml文件的创建

创建一个xml文档流程如下&#xff1a; l 用xmlNewDoc函数创建一个文档指针doc&#xff1b; l 用xmlNewNode函数创建一个节点指针root_node&#xff1b; l 用xmlDocSetRootElement将root_node设置为doc的根结点&#xff1b; l 给root_node添加一系列的子节点&#x…

压力测试http_load 通过修改配置测试https协议成功了。

到http://www.acme.com/software/http_load/ 下载http_load &#xff0c;安装也很简单直接make;make instlall 就行。 如果你需要测试https&#xff0c;你必须将 Makefile中 # CONFIGURE: If you want to compile in support for https, uncomment these # definitions. You w…

面向对象设计与分析40讲(16)静态工厂方法模式

前面我们介绍了简单工厂模式&#xff0c;在创建对象前&#xff0c;我们需要先创建工厂&#xff0c;然后再通过工厂去创建产品。 如果将工厂的创建方法static化&#xff0c;那么无需创建工厂即可通过静态方法直接调用的方式创建产品&#xff1a; // 工厂类&#xff0c;定义了静…

搜索详解

搜索 一.dfs和bfs简介 深度优先遍历(dfs) 本质&#xff1a; 遍历每一个点。 遍历流程&#xff1a; 从起点开始&#xff0c;在其一条分支上一条路走到黑&#xff0c;走不通了就往回走&#xff0c;只要当前有分支就继续往下走&#xff0c;直到将所有的点遍历一遍。 剪枝&a…