Java
文章平均质量分 85
四五又十
这个作者很懒,什么都没留下…
展开
-
高效的数据类型-跳表的原理与实现Java版本
本篇文章重在实现,跳表这种数据结构第一次接触是在Redis里面,当时只是学习了跳表的理论知识,光靠理论是难以支撑的,这点在字节面试过程中被问到跳表便可体会到跳表是一种非常高校的数据结构,是由美国科学家William Pugh发明的,他在一篇论文里面非常详细的介绍了跳表数据结构和插入删除等操作基本思想首先,跳表是对有序链表的改进,对于普通链表来说无论是普通链表还是有序链表,对于一个节点的查找操作都需要从头部开始逐个比较,有序链表有序的性质在这里不可用。有什么办法能用到有序链表的有序性质呢,使得有序链表的原创 2021-07-30 10:04:19 · 7607 阅读 · 0 评论 -
Centos7配置网卡与一些软件的安装
由于之前的虚拟机的磁盘空间不够了,也不是使用lvm逻辑卷组,所以最后选择了冲洗安装了虚拟机,所以这里记录一些一些基本环境的搭建,方便下次直接查询文档,而不需要各种百度各种软件的安装,一些框架使用docker进行安装,本文也会给出一些响应的命令进行参考学习1.配置网卡安装好虚拟机的第一步便是配置网络,配置静态ip,我一般是选择net模式这样每次在变更网络的时候不需要在进行重新设置[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens原创 2021-03-10 20:43:00 · 89 阅读 · 0 评论 -
微服务注册中心--Eureka
一、简介与架构Eureka是一个基于REST (Representational State Transfer)的服务,主要用于AWS云中的服务定位,以实现中间层服务器的负载平衡和故障转移。也就是说Eureka在微服务中是一个服务发现注册的组件Eureka是我们学习的第一个服务注册中心的组件,首先理解为什么要有注册中心?当微服务中的服务数量越来越多时,如果没有一个中心去管理这些微服务那么各个服务之间的调用则会变得杂乱无章,有一个服务配置中心来同意管理这些微服务的注册于调用。Eureka是一款由Netf原创 2021-02-26 17:14:21 · 3955 阅读 · 5 评论 -
深入理解mybatis
参考《深入浅出Mybatis技术原理与实战》一、Mybatis简介1.1 JDBC的弊端在深入理解Mybatis之前,先回顾JDBC的操作步骤,Java程序要操作数据库都是使用JDBC,使用步骤如下:加载数据库驱动,class.forname建立数据库连接,获取Connection 对象创建数据库操作对象Statement定义操作的SQL语句执行数据库操作获取并操作结果集ResultSet关闭对象,回收数据库资源具体代码如下:public class JDBCTest { /*原创 2021-02-24 10:35:40 · 390 阅读 · 0 评论 -
利用反射与注解写一个Spring的IOC
前面两篇文章,介绍了Java基础的反射与注解,Spring的IOC容器实现的核心原理便用到了反射与注解(注解形式的配置),看完反射与注解的同学再来看这篇博客,便能对反射与注解的知识了解扎实注解反射–Java框架设计的灵魂思路分析有三个注解:Component:要被加载的beanComponentScan:bean所在的包Value:该bean的一些属性赋值流程分析:代码:@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUN原创 2021-02-02 15:50:36 · 204 阅读 · 0 评论 -
Java注解
目录一、概述二、JDK预定义的注解2.1ava 内置三大注解2.2源注解(注解的注解)1.@Target2.@Retention3.@Documented4.@Inherited三、自定义注解1.声明注解2.实现注解3.使用注解4.特殊用法四、解析注解一、概述注解是一种能被添加到java代码中的元数据,类、方法、变量、参数和包都可以用注解来修饰。注解对于它所修饰的代码并没有直接的影响。注解是jdk1.5之后的特性注解有许多用法,其中有:**为编译器提供信息:**注解能被编译器检测到错误编译时和部原创 2021-02-01 13:17:43 · 122 阅读 · 0 评论 -
反射--Java框架设计的灵魂
一、概述在学习完JAVASE阶段的高级框架例如Spring、Mybatis等等,总会去思考这些框架是如何工作的,其中的底层原理是什么?但是要了解这些高级框架的设计原理,首先Java基础得扎实,Java基础阶段的反射、注解、动态代理与设计模式构成了一些高级框架的基础。其实在基础篇的学习中,我已经反复的学习过反射,但是仅仅是当时学习时使用到,到后面的学习中就没有在使用过反射,因此重新写一遍反射的相关知识List<Integer> list = new ArrayList<>();原创 2021-01-31 16:49:24 · 195 阅读 · 1 评论 -
NIO群聊系统案例---网络编程NIO
一、从BIO到NIO前面写过BIO的相关代码,BIO的问题很突出:一个请求要对应一个线程,当并发数比较大时,需要大量的线程,造成系统资源占用比较大当连接建立时,读写操作是阻塞的,所以当一个请求暂时不进行读写操作时,就会造成资源的浪费为了解决上述的问题,jdk1.4引入了NIONIO全称为 java non-blocking IO看这个名字就可以知道是java的非阻塞IO,NIO是可以通过一个线程来处理多个请求的操作的,而不是像BIO一样必须要一请求 —一线程这种模型,NIO有以下特点:NI原创 2021-01-29 15:46:17 · 273 阅读 · 2 评论 -
jdk8新特性
目录一、概述二、Lambda表达式2.1从匿名内部类到Lambda2.2 Lambda语法三、 函数式接口四、方法引用与构造器引用4.1 方法引用4.2 构造器引用五、Stream API5.1 Stream概述5.2 创建Stream5.3 Stream的中间操作5.4 Stream的终止操作5.5 一些案例六、Optional七、日期API7.1 日期/时间7.2 时区一、概述jdk1.8是Java语言开发的一个重要版本,Java 8 是oracle公司于2014年3月发布,可以看成是自Java 5原创 2021-01-29 11:19:47 · 1112 阅读 · 1 评论 -
Java多线程基本技能
参考:《Java多线程编程核心技术》一、程序、线程与进程程序:程序是存储在磁盘上, 包含可执行机器指令和数据的静态实体进程:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J0Txw49h-1604215640129)(C:\Users\VSUS\Desktop\笔记\多线程\img\1.png)]上面是百度百科对进程这个词条的解释,程序是静态的,存储在磁盘上,进程是动态的,当程序运行起来就成了进程。线程:在百度百科对进程的解释中,已经说到了进程是线程的容器。原创 2020-11-01 15:30:20 · 115 阅读 · 0 评论 -
Java基本io
参考:《Java编程思想》IO属于java的基本知识,但是io的知识体系过于庞大,书中提到过“对程序语言的设计者来说,创建一个好的输入/输出系统是一项艰难的任务”,我觉得艰难在于,需要考虑太多的因素,因为文件有多种多样:文本格式,音视频格式,zip格式,网络等等,读取的方式也很多:顺序读取,随机读取,按行,按字符等等。这也就导致了Java io类库的庞大。目录一、io的分类二、输入字节流InputStream三、输出字节流OutputStream四、输入字符流Reader五、输出字符流Writer六、高原创 2020-10-27 19:05:05 · 403 阅读 · 0 评论 -
Java集合--ArrayList深入理解
来源:Java核心技术,博客目录一、概述1.类注释解读2.ArrayList实现的接口3.ArrayList整体架构二、源码解析1.初始化2.add和扩容方法3.删除1.通过值来删除2.通过下标来删除4.迭代器1.hasNext2.next3.remove一、概述ArrayList是我们很常用的一个集合类,但是其底层却是有很丰富的代码逻辑。Arraylist的底层源码解读开始。1.类注释解...原创 2020-03-24 15:56:34 · 285 阅读 · 0 评论 -
Java--String类的一些思考
来源:java核心技术,博客String类型是我们java开发中比较常见的一个类,但是这个常见的类却隐藏着很多的知识点,现做一个总结。目录一、创建String的方式1. String str1 = “hello”2.String str2 = new Stirng(“hello”)3.常见问题,加深理解二、String的不可变性三、String字符串“+”引发的一些问题思考四、intern方法...原创 2020-03-20 22:03:56 · 406 阅读 · 0 评论 -
Java数组的使用以及常用方法
来源:Java核心技术、网上博客目录一、数组的概念二、定义数组的三种方式1.一维数组2.二维数组三、数组的遍历1.一维数组2.二维数组四、数组的常用方法1.toString2.aslist3.arraycopy4.copyOf和copyOFRange方法5.数组的排序sort6.binarySearch一、数组的概念数组是一种数据结构, 用来存储同一类型值的集合。通过一个整型下标可以访问数组...原创 2020-03-18 20:49:57 · 710 阅读 · 0 评论 -
Java学习笔记---泛型
参考----《Java核心技术》一、概述在java增加泛型之前,通用程序的设计就是利用继承来实现的,将方法的类型参数设置为基类,这样的方法将会具有通用性,例如下面class ArrayList { private Object[] elementData; public Object get(int i) { } public void add(Object o) { ...原创 2020-02-13 20:35:16 · 178 阅读 · 0 评论 -
Java学习笔记---泛型
参考----《Java核心技术》一、概述在java增加泛型之前,通用程序的设计就是利用继承来实现的,将方法的类型参数设置为基类,这样的方法将会具有通用性,例如下面class ArrayList { private Object[] elementData; public Object get(int i) { } public void add(Object o) { ...原创 2019-11-24 14:36:24 · 82 阅读 · 0 评论 -
Java学习笔记---内部类
使用内部类的优点内部类是定义在另一个类中的类,使用内部类主要有以下优点①内部类方法可以访问该类的定义所在的作用域中的数据,包括私有的数据②内部类可以对同一个包中的其他类隐藏其阿里③使用匿名内部类比较便捷...原创 2019-11-02 11:51:24 · 125 阅读 · 0 评论 -
Java学习笔记---Lambda 表达式(简洁优雅的生产力)
参考:《Java核心技术》与大神博客Lambda表达式的作用就是将一块代码块赋给一个Java变量 ,在jdk8之前是没有Lambda表达式的。Lambda表达式的最主要作用就是让代码更加的整洁。所有的Lambda的类型都是一个接口,而Lambda表达式本身就是这个接口的实现。一、Lanbda表达式对接口要求Lambda规定接口中只有一个需要被实现的方法,不是规定接口中只有一个方法jdk8...原创 2019-10-26 23:45:40 · 226 阅读 · 0 评论 -
Java环境变量(jdk-12.0.2)配置
变量名:JAVA_HOME环境变量:G:\JAVA\jdk-12.0.2变量名:path环境变量(添加):%JAVA_HOME%\jre\bin %JAVA_HOME%\bin变量名:CLASSPATH环境变量:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar...原创 2019-08-21 01:22:55 · 2561 阅读 · 2 评论 -
一个声音播放程序(java)
package org.java.demo;import javax.sound.midi.*;public class MiniMiniMusicApp { public static void main(String[] agrs) { MiniMiniMusicApp mini = new MiniMiniMusicApp(); mini.play(); } publi...原创 2019-08-24 23:18:07 · 308 阅读 · 0 评论 -
Java学习笔记--网络联机----使用Socket读取数据,写入数据
使用BufferReader从Socke上读取数据步骤:①建立对服务器的Socket的连接,注意这里的127.0.0.1指的是本机,4242是指端口Socket s = new Socket("127.0.0.1", 4242);②建立连接到Socket的低层输入串流的InputStreamReaderInputStreamReader streamread = new Input...原创 2019-09-11 07:42:46 · 832 阅读 · 0 评论 -
Java学习笔记----创建线程、sleep()、
什么是线程在讨论什么是线程前有必要先说下什么是进程,因为线程是进程中的一个实体,线程本身是不会独立存在的。进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,一个进程至少有一个线程,进程中的多个线程是共享进程的资源的。如何启动新的进程①建立Runnable对象(线程的任务)Runnable threejob = new myRunnable...原创 2019-09-24 01:17:13 · 289 阅读 · 0 评论 -
Java学习笔记--对象与类(1)
知识来源:Java核心技术类①类是构造对象的蓝图或模板②类与类之间的关系:(1)依赖;(2)聚合;(3)继承使用预定义类在Java中,没有类就无法做成任何事情,但是并不是所有的类都具有面向对象的特点,例如:Math类对象与对象变量要想使用对象,就必须首先构造对象,并指定其初始状态,然后对对象应用方法。在Java中使用构造器构造新实例,构造器是一种特殊的方法,用来构造并初始化对象n...原创 2019-09-30 22:41:55 · 124 阅读 · 0 评论 -
Java学习笔记---类与对象(2)
final实例域可以将实例域定义为final,构建对象时必须对它进行初始化,并且在后面的操作中,不能够对它进行修改。静态域与静态方法静态域如果将域定义为static ,每个类只有一个这样的域,而每一个对象对于所有的实例域却都将有自己的一份拷贝,例如:假定给每一个雇员设定一个唯一的标识码nextId,这里给每一个雇员添加一个实例域id和静态域nextId,,现在每一个雇员对象都有自己的id域...原创 2019-09-30 23:26:51 · 124 阅读 · 0 评论 -
Java学习笔记--对象序列化输入输出、以文本方式写入,读出
将对象序列化写入文文件1、将对象写入文件的步骤:①创建出FileOutputStreamFileOutputStream outputstream = new FileOutputStream("F:\\Java\\output.ser");②创建出ObjectOutputStreamObjectOutputStream os = new ObjectOutputStream(ou...原创 2019-09-05 22:49:40 · 438 阅读 · 0 评论