Java多线程
线程、进程、多线程
进程:进程是程序的一次执行过程,是一个动态的概念,是系统资源分配的单位
线程:通常在一个进程中可以包含若干个线程,一个进程中至少有一个线程,不然没有存在的意义,线程是CPU调度和执行的单位
多线程:真正的多线程是有多个CUP,同时执行,如果在只有一个CPU的情况下,同一时间只能执行一个代码,因为切换速度很快,造成了同时执行的假象
线程就是独立的执行路径
在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程、gc线程
main()称为主线程,为系统入口,用于执行整个程序
在一个线程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不可人为干预的
对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制
线程会带来额外的开销,如CPU调度时间(排队时间),并发控制开销
每个线程在自己的工作内存交互,内存控制不当会造成数据不一致
线程的实现方式一:继承Thread类123456789101112131415161718192021// 继承Thread类,重写run()方法,在run()方法体内编写业务代码 ...
JavaIO流
I/O流概念:内存与存储设备之间传输数据的通道
流的分类按方向
输入流:将存储设备中的内容读到内存中
输出流:将内存中的内容写到存储设备中
按单位
字节流:以字节为单位,可以读写所有数据
字符流:以字符为单位,只能读写文本数据
按功能
节点流:具有实际传输数据的读写功能
过滤流:在节点流的基础之上增强功能
字节流字节流的两个超类:InputStream和OutputStream
123456789//InputStream字节输入流public int read(){}public int read(byte[] b){}public int read(byte[] b, int off, int len){}// OutputStream字节输出流public void write(int n){}public void write(byte[] b){}public void write(byte[] b, int off, int len){} ...
Java集合
集合概念:对象的容器,定义了对多个对象进行操作的常用方法,可实现数组的功能
所有集合类都位于java.util包下,Java的集合类主要由两个接口派生而出,Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
集合与数组区别:
数组长度固定,集合长度不固定
数组可以存储基本类型和引用类型,集合只能存储引用类型
Collection体系集合
Collection父接口特点:代表一组任意类型的对象,无序、无下标、不能重复
12345678910111213141516171819202122232425262728293031323334353637383940public static void main(String[] args) { // 创建集合 Collection collection = new ArrayList(); // 添加元素 collection.add("苹果"); collection.add(" ...
Java常用类
内部类
概念:在一个类的内部再定义一个完整的类,当外部类与内部类的属性重名时,优先访问内部类属性
分类:成员内部类、静态内部类、局部内部类、匿名内部类
成员内部类
内部类在编译之后也会产生独立的字节码文件
成员内部类在类的内部定义,与外部类的变量和方法同级别的类
成员内部类可以直接拿到外部类的私有属性
如果存在同名属性,优先访问成员内部类的属性
成员内部类里不能定义静态成员变量,但是可以定义静态常量(final),这个静态常量在不实例化外部类的情况下可以调用
123456789101112131415161718192021222324252627public class Outer{ private int id = 10; private String name = "张三"; public void out(){ System.out.println("这是外部方法"); } public class Inner { static fina ...
Hibernate的简单入门使用
什么是Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JavaEE架构中取代CMP,完成数据持久化的重任。
Hibernate的简单使用(Springboot项目)pom文件引入jar包123456789101112131415161718192021<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></ ...
Mybatis的简单入门使用
什么是Mybatis
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
持久化
因为内存有断电即失的特性,所以需要进行数据持久化
持久化就是将程序的数据在持久状态和瞬时状态转化的过程
持久层持久层,可以理解成数据保存在数据库或者硬盘一类可以保存很长时间的设备里面,不像放在内存中那样断电就消失了,也就是把数据存在持久化设备上
Mybatis的简单使用(Maven项目)pom文件引入jar包1234567891011121314151617181920212223242526<!-- mybatis --><dependency> <groupId>org.mybatis</groupId> <artifactId>m ...
稀疏数组
定义
稀疏数组是经过特殊处理后的二维数组。
当一个二维数组中存在大量相同值的时候,可以考虑转换为稀疏数组来进行存储,从而达到节省内存空间的目的。
二维数组中存在的大量相同值我们称之为无效值,除开无效值,剩下的就是有效值。
123456789101112130 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 10 10 20 0 0 5 0 0 0 0 0 0 ======> 1 2 20 0 0 0 0 0 0 0 0 0 4 3 50 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0存有大量相同值的二维数 ...
2020年终总结
2020年已经走到尾声了,马上就要迎来崭新的2021年了,其实也没什么好期待的,要说新年的美好祝愿吧,那就是希望家人身体健康,仅此而已。想了想,还是写一篇年终总结吧,我文笔不好,但就想着给我的2020年留下个痕迹,回头还能看一看,也算是记录了我的成长吧!
2020年过得很快,像是眨了了个眼,就要说告别了。2020年也刚好是我转到软件专业的第一年,当时的我兴奋、激动、满怀憧憬,还记得我跟我原室友是这样讲的,我说:“如果没转成功,我真的没有读下去的必要了!”这一次很幸运,我成功转到了软件专业,还高兴地请我的原室友们吃了顿火锅。
在软件专业的第一个学期(也就是今年上半年),因为突然爆发疫情的原因,只能在家中上网课,隔着屏幕与老师同学们交流学习,我很清楚自己的处境,我不过就是一个软件专业的小白,零基础,跟人家学了一个学期的根本没法比,所以我每一堂课都听得很认真,一边敲代码,一边做笔记,聚精会神,生怕遗漏了什么。对于我们班导师晖哥提出的一些专业相关的东西,让我们了解的,我都会在课下去查一查,了解一下,学习一下。每天上课老师讲的是我所感兴趣的东西,所以我充满干劲。期末成绩也算是给了自己一个满意的交 ...
从零开始,搭建个人博客(二)
文章更新于2020年11月30日,更正了一些小问题,保证了本教程的可行性与可靠性
前言之前写过一篇网站搭建的文章,那是我最初搭建博客的方式,很方便、快捷,但是,即便我购买的是相对较便宜的学生机,每年在服务器和域名上都要花上一百多块钱,作为没有稳定收入的学生群体,我反正是觉得不值的,所以后来用了免费的方式搭建了现在这个静态博客,当然如果你认为每年为博客投入一定钱来续费服务器和域名是值得的,也可以看看我的上一篇搭建文章,《从零开始,搭建个人博客(一)》,也许会给你带来一些帮助。
准备
一个码云账号,前往注册
Node工具,点击下载
Git工具,点击下载
搭建教程安装NodeNode在官网下载安装包手动安装即可,安装完成后,用键盘win+R,输入cmd打开终端,依次输入以下两条命令,如图显示版本号,即表示安装成功
1node -v
1npm -v
安装cnpmnpm是一个包管理工具,由于它安装速度慢,所以我们通过cnpm来代替npm进行依赖的安装,用以下命令安装cnpm
1npm install -g cnpm --registry=https://registry.npm.ta ...
用Markdown写出一篇漂亮的博客
前言昨天和一个学长聊到写博客的问题,现在主流的博客系统,都已经支持使用Markdown语法编写博客了,但是任然有一些博客系统还是传统的html编辑器,通过源代码的形式来控制博客的排版,比如博主之前用的wordpress博客系统就是如此,Markdown格式写出来的博客还要通过一些特殊的方式,来转换成html代码来编辑发表,今天我就来教一下大家如何实现。
准备工作
Visual Studio Code(VScode)编辑器,点击下载
自学Markdown语法,推荐B站小马视频教学,点击前往
教程
在VScode的插件商店搜索Markdown Preview Enhanced进行安装即可,如下图所示。
安装完成后在我们编写窗口的右上角会有一个点击预览markdown格式的小按钮,点击后会在右边新开一栏,实时预览我们用markdown格式编写的内容,十分方便,效果如下图所示。
当我们编写完成后,只需要在右边预览处点击鼠标右键,就会有另存为html格式的选项,然后我们再把html中body标签内的源码复制粘贴到博客后台,对格式微调,发表文章即可。
多讲一句Markdown语法,我 ...