java基础
IT精神小伙
这个作者很懒,什么都没留下…
展开
-
List、Set区别、ArrayList、LinkedList、HashSet、TreeSet区别以及HashMap、Hashtable、ConccurentHashMap三者的区别:
List和Set集合的区别:HashMap、Hashtable、ConccurentHashMap三者的区别:原创 2021-03-18 20:37:57 · 206 阅读 · 0 评论 -
RuntimeException和非RuntimeException、Error
RuntimeException和非RuntimeException、Error原创 2021-03-18 20:17:08 · 159 阅读 · 0 评论 -
Spring、SpringMVC、SpringBoot区别、Maven的构建生命周期
spring、SpringMVC与SpringBoot的区别:Spring是这些框架的应用的基础,提供了IOC控制反转和AOP控制切面编程,让我们更好的管理对象的操作SpringMvc是Spring子项目用于提供Web支持,替代来传统的Servlet通过SpringMVC提高web应用的兼容性和可维护性,同时SpringMVC中的Controller也要被Spring中的IOC管理,拦截器也用到了AOP切面编程的知识,来对Controller进行扩展与控制SpringBoot是Spring整个体系的敏原创 2021-03-18 13:36:04 · 414 阅读 · 0 评论 -
Mybatis以及俩个缓存机制
Mybatis开发流程1.导入依赖2.配置数据库信息:添加一个mapper.xml,sql语句 #{参数}namespace:命名空间,引出虚拟的类位置;id:sql语句的别称;parameterType:参数类型;resultType:返回对应的实体类位置;然后在mybatis配置文件 注册mapper.xml构建sqlsessionfactory工厂SqlSeesionFactory sessionFactory=new SqlSessionFactoryBui原创 2021-03-18 13:10:29 · 109 阅读 · 0 评论 -
Spring、SpringMVC、IOC容器、注解、AOP五种通知类型、Spring声明事务、SpringMVC的配置、SpringMVC的执行流程
IOC容器:spring中 scope属性和lazy-init属性的作用:scope:设置 是单例还是多例模式 singleton和prototypelazy-init:延迟加载,可以减少服务器压力。需要用的时候加载。俩个注解用来对象注入,俩者的区别:注入对象的俩个注解:@Autowired 和@Resource区别:提供方不同:@Autowired 第三方提供@Resource 官方的机制不同:@Autowired 只能根据类型在IOC中来匹配@Resource 可原创 2021-03-18 10:36:08 · 189 阅读 · 0 评论 -
jvm内存
JVM的内存组成:共享区和私有区共享区分为:堆:用于保存程序运行时的java变量、对象实例是垃圾回收的主要区域,不在引用的对象在堆被销毁方法区:虚拟机中加载类的信息、常量、静态内容私有区:程序计数器PC:当前线程所执行的字节码指令的行号指示器例如:分支、跳转、循环、异常处理、线程恢复,在java多线程中是通过线程轮流切换分配时间片执行,为了线程切换能恢复正确位置,每个线程有单独程序计数器。当出现:分支、跳转、记录行号,利于线程恢复。虚拟机栈:线程私有,为java的方法服务,当线程创建的时候,虚原创 2021-03-14 15:24:26 · 117 阅读 · 1 评论 -
链表一
链表-真正的动态数据结构最简单的动态数据结构。更深入的理解引用(指针)更深理解递归链表Linked List类比于火车,数据存储在火车车厢,而每节火车都需要铁链来链接从而指向下一节车厢优点:真正的动态,不需要处理固定容量的问题缺点:没有随机访问数据的能力数组和链表的对比组成链表节点的类:public class LinkedList<E> {private class Node{ public E e; public Node next; publi原创 2021-03-14 14:11:54 · 72 阅读 · 0 评论 -
数组扩容机制、均摊复杂度
动态数组-数组扩容机制扩容机制其实就是新开辟一个新的空数组,新的数组的容量要比原先数组要大,然后通过遍历将原先数组的元素赋给新的数组中,最后再将原先数组的引用指向新的数组,原先数组会因为没有引用就会被垃圾处理机制当成垃圾处理掉。动态数组的时间复杂度:均摊时间复杂度O(1)复杂度震荡:出现问题的原因:removeLast时resize过于着急(Eager)解决方案: Lazy当size==capacity/4时,才将capacity减半...原创 2021-03-14 09:58:02 · 1254 阅读 · 0 评论 -
IOC和DI、Bean注入属性、Spring中Bean实例化
IOC和DI的理解:IOC控制反转,是一种设计理念,由第三方来管理与控制对象。将原先的编译时绑定数据,变成运行时动态的创建。可通过applicationContex对象容器来对程序的依赖进行解耦;将对象的控制权交给第三方的对象容器,使其在运行时创建对应对象在付给对应变量。有利于功能维护;IOC容器:是applicationContexDI依赖注入:具体技术实现,由对象容器在运行时动态注入对象。反射作用:在运行时,进行动态的创建、设置以及管理工厂模式:传入bean id 获取指定对象,返回的是对象接原创 2021-03-13 22:56:21 · 200 阅读 · 2 评论 -
线程、多线程、进程、线程生命周期、线程的五种状态、同步、线程间通信、创建线程的俩种方式
进程概念:进程是指可执行程序存放在计算机存储器的一个指令序列,它是一个动态执行的过程线程:线程是比进程还要小的运行单位,一个进程包含多个线程,线程是一个子程序时间片轮转实现多任务同时进行线程的创建:1.创建一个Thread类,或者一个Thread子类的对象2.创建一个实现Runnable接口的类的对象Thread类Thread是一个线程类,位于java.lang包下Thread类的常用方法:Runnable接口1.只有一个方法run();2.Runnable是Java中用以实现原创 2021-03-13 20:30:23 · 286 阅读 · 2 评论 -
数组
数组:public class Main{public static void main(String[] args){ int[]a=new int[30]; for(int i=0;i<a.length;i++) a[i]=i; int[]ages=new int[]{80,60,90}; arges[0]=99; for(int i=0;i<ages.length;i++)原创 2021-03-13 13:59:50 · 88 阅读 · 0 评论 -
数据结构
数据结构:研究数据如何在计算机中进行组织和存储,是我们可以高效的获取数据或者修改数据。在内存进行增删改查。数据结构基础分类:线性结构有数组、栈、队列、链表、哈希表…树结构有二叉树、二分搜索树、AVL红黑树、Treap、Splay、堆、Trie、线段树、K-D树、并查集、哈夫曼树…图结构有邻接矩阵、邻接表我们需要根据不同的应用来灵活选择最合适的数据结构数据库中的树结构:AVL、红黑树、B类树哈希表操作系统中的数据结构优先队列(组织存储进程)、内存管理、文件管理都需要使用到数据结原创 2021-03-13 08:39:42 · 2406 阅读 · 9 评论 -
Comparator和Comparable两者的关系和区别
Comparator和Comparable的区别:原创 2021-03-11 20:05:05 · 149 阅读 · 0 评论 -
Map、HashMap、ArrayList HashSet、数组的排序、集合排序
MapMap中的数据是以键值对(key-value)的形式存储key-value以Entry类型的对象实例存在可以通过key的值查找value一个映射不可包含重复的键 (key不能重复)HashMap是基于哈希表的Map接口的实现可用null值和null键key值不可重复HashMap中的Entry对象是无序排列的ArrayList底层由数组实现元素有序并且可以重复可以动态增长元素可以为nullHashSet元素无序并且不可以重复迭代器循环HashMapHashMap中原创 2021-03-11 19:21:19 · 204 阅读 · 1 评论 -
日志log4j2、AOP处理
日志级别:errorwarninfodebugtrace想要用新的日志组件需要排除Logback依赖,然后引入需要的日志框架通过exclusions 可以排除特定依赖,排除冲突如果想要引入log4j2可以引入AOP统一处理Web请求日志:是对于系统健壮性的保证用filter将每个请求打印出来,可以提高开发和调试效率引入AOP依赖<dependency> <groupId>org.springframework.boot</groupId&原创 2021-03-10 23:01:06 · 230 阅读 · 0 评论 -
垃圾回收机制、算法、对象是否回收判断依据、GC分类、年轻代、老年代、触发fullGC的条件、晋升到老年代的方法条件
垃圾回收回收算法:1.标记清除算法(Mark and Sweep)mark:从根进行扫描,对存活的对象进行标记Sweep:对堆内存从头到尾进行线性遍历,回收不可达对象内存其中未被标记的对象即为不可达对象,就会被回收,会导致一些不连续的内存碎片,空间碎片化,当需要有一个更大内存的对象存储时会进行下一次垃圾回收操作2.标记复制算法将内存分为对象面和空闲面,在对象面创建对象,存活的对象会被复制到空闲面上,最后将对象面的所有对象内存清除适用于对象存活率低的情况,年轻代一般10%存活,因此需要复制的相对原创 2021-03-10 15:10:58 · 520 阅读 · 0 评论 -
SpringCloud简要介绍
SpringCloud简介成熟的微服务框架,定位为开发人员提供工具,以快速构建分布式系统核心组件 Spring Cloud服务注册中心 SpringCloud Netflix Eureka服务调用方式 RESTAPI、Feign、Ribbon服务网关 Spring Cloud Netflix Zuul断路器 Spring Cloud Netflix Hystrix...原创 2021-03-08 20:47:43 · 59 阅读 · 0 评论 -
Linux知识
操作系统:是应用程序运行的基础支撑环境操作系统作用是管理和控制计算机系统的硬件与软件资源。Linux是服务器端操作系统Linux特点:免费使用,自由传播支持多任务、多用户、多CPU高效灵活兼容任意x86架构计算机强大易用的系统命令完整的应用软件生态CentOS运行要求:CPU:1核,建议2核以上内存:1G,最好2G以上硬盘:预留20G可用空间Windows运行Linux...原创 2021-03-08 20:45:38 · 54 阅读 · 0 评论 -
字段约束和数据库范式
字段约束:数据库的范式:构造数据库必须遵循一定的规则,这种规则就是范式关系数据库有六种范式,一般情况满足第三范式即可。第一范式:原子性*第一范式是数据库的基本要求,不满足这一点就不是关系型数据库*数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复属性,第二范式:唯一性*数据表中的每条记录必须是唯一的。为了实现区分,通常要为表加上一个列用来存储唯一标识,这个唯一属性被称做主键列第三范式:关联性每列都与主键有直接关系,不存在传递依赖依照第三范式,数据可以拆分保存到原创 2021-03-08 15:27:03 · 92 阅读 · 1 评论 -
数据库sql语句具体介绍增删改查
SQL是用于访问和处理数据的标准计算机语言SQL的语言分类:DML(数据操作语言):增加、修改、删除、查询DCL(数据控制语言):用户、权限、事务的管理DDL(数据定义语言):逻辑库、数据表、视图、索引。注意点:SQL语句不区分大小写,但是字符串区分大小写SQL语句必须以分号结尾SQL语句中的空白与换行没有限制,但是不能破坏语法。SQL语句的注释有两种:注释/* 又是注释 */#建立数据库CREATE DATABASE 逻辑库名称;展示数据库SHOW DATABASE;删原创 2021-03-08 14:38:25 · 343 阅读 · 2 评论 -
集合介绍,List、ArrayList、Set、Iterator(迭代器)
数组:适用于固定不变的集合:不断变化的数据,增删频繁数据集合框架的体系结构:Collection :类的对象Map:键值对List:List是元素有序并且可重复的集合,称为序列List可以精确的控制每个元素的插入位置,或删除某个位置的元素List的两个主要实现类是 ArrayList和LinkedListArrayList:ArrayList底层是由数组实现的动态增长,以满足应用程序的需求在列表尾部插入或删除数据非常有效更适合查找和更新元素ArrayList中的元素可以为nul原创 2021-03-07 17:03:33 · 158 阅读 · 1 评论 -
Spring、IoC控制反转
Spring :Spring框架是企业开发复杂性的一站式解决方案核心是IoC容器与AOP面向切面编程Spring IoC负责创建与管理系统对象,并在此基础上扩展功能IoC控制反转:将对象的控制权交给第三方进行管理,由第三方进行对象创建。全称 Inverse of Control,是一种设计理念由代理人来创建与管理对象,消费者通过代理人来获取对象。IoC的目的是降低对象之间直接耦合DI依赖注入:IoC是设计理念,是现代程序设计遵循的标准,是宏观目标DI(Dependence Inject原创 2021-03-06 16:48:08 · 103 阅读 · 0 评论 -
反向代理、正向+反向代理、Nginx介绍以及它的优点
Nginx介绍:代理服务器有防火墙可以起到保护作用、动态静态资源分离俩大场景:HTTP的反向代理服务器HTTP的反向代理服务器:在后端提供负载均衡,可以把用户的请求进行平均分配,缓存功能动态静态资源分离:如果不分离会变慢静态资源无需经过Tomcat,Tomcat只负责处理动态请求后缀为gif的时候,Nginx会直接获取到当前请求的文件并返回也是静态资源服务器Nginx的优点:高并发、高性能可扩展性好高可靠性提供高可用热部署(不停止服务的时候进行更新)开源、可商用最后两个图:原创 2021-03-06 16:09:11 · 268 阅读 · 0 评论 -
String和StringBuilder区别和描述 ,以及StringBuilder的常用方法
String和StringBuilder的区别:String具有不可变性,StringBuilder则没有,String会产生废弃的数据,用StringBuilder可以避免当对字符串频繁操作时,需要使用StringBuilderStringBuilder 和StringBuffer区别:用法基本相似,StringBuffer是线程安全的,StringBuilder则没有,但性能高。StringBuilder 继承Object类常用的方法如下: ...原创 2021-03-06 11:39:44 · 260 阅读 · 0 评论 -
等于运算符==与equals方法的区别以及内存、栈、常量池的分析
等于运算符与equals方法的区别:package com.test;public class TestTwo{ public static void main(String[] args){ String a="我爱中国"; String b="我爱中国"; String c=new String("我爱中国"); String d=new String("我爱中国");原创 2021-03-06 10:36:52 · 94 阅读 · 0 评论 -
字符串和byte数组之间相互转换
字符串和byte数组之间相互转换package com.test;public class TestOne{ public static void main(String[] args){ //定义字符串 String a=new String("我喜欢编程!"); //将字符串就转换为byte数组,并打印输出。 byte[] arrs=a.getBytes("GBK");原创 2021-03-06 10:09:43 · 3065 阅读 · 0 评论 -
Zookeeper的作用以及特点,和CAP的关系。
Zookeeper的介绍:*Zookeeper是一个集群、可靠的中间件,可以使信息没同步完成时就不对外服务,知道同步完可以缩短同步的时间,较好的分布协调能力。分布式协调服务。*Zookeeper是开源的高性能的分布式应用协调系统,一个高性能的分布式数据一致性的解决方案。*Zookeeper支持java 依赖jdkZookeeper的五大特点:1.顺序一致性 客户端-服务端2.原子性 要不同步成功要不就都不成功3.单一视图 视图一致4.可靠性5.即时性CAP:C:Consistenc原创 2021-03-05 20:35:12 · 416 阅读 · 2 评论 -
String常用的方法
String的常用方法如下图:package object;public class StringOne { public static void main(String[] args) { String s="我进大厂!"; System.out.println("字符串的长度:"+s.length()); System.out.println("取出特定索引:"+s.charAt(3)); System.out.print原创 2021-03-05 14:44:27 · 68 阅读 · 0 评论 -
包装类 特例以及 引用数据类型
对象包装类,俩个特例:Double Float 不存在缓冲池。引用数据类型:类(class)接口(interface)数组原创 2021-03-05 14:12:23 · 87 阅读 · 0 评论 -
包装类对象间的比较以及初始值
1.包装类对象的初始值包装类初始化值为:null2.包装类对象间的比较*当 == 俩边是对象的话,比较的是对象在内存中的引用,然而通过new ,会在内存开辟一段新的空间。*当有自动拆装箱中会有 包装类.valueOf操作,为了提高效率,提供类似常量数组的缓存区(对象池),如果传过来的数值是在 -128<=参数<=127 就在缓冲区去查找,有就用,没有就创建。如果不在此范围就直接实例化。基本数据类型的初始值如下图:...原创 2021-03-05 14:03:41 · 259 阅读 · 0 评论 -
数据类型和字符串之间的转换
基本数据类型和字符串之间的转换package box;public class BoxTwo{ public static void main(String[] args) {//数据类型转换成字符串 对应的包装类.toStringint b=2;String b1=Integer.toString(b);//字符串转换为基本数据类型 1.包装类的pase方法 2.包装类的自动拆箱int b2=Integer.paseInt(b1);int b3=Integer.val原创 2021-03-05 13:32:44 · 81 阅读 · 0 评论 -
数据类型与包装类间的转换以及装箱、拆箱
装箱: 基本数据类型转换成包装类拆箱:包装类转化成基本数据类型装箱分为自动装箱和手动装箱俩种方法。有装箱操作也会有拆箱操作,而拆箱也会分为自动拆箱和手动拆箱。代码如下:package box;public class BoxOne{ public static void main(String[] args) { //自动装箱操作 int a=3; Integer a1=a; //手动装箱 Integer a2=new Integer(a);原创 2021-03-05 13:11:45 · 91 阅读 · 0 评论 -
基本数据类型对应的包装类
java中数据类型基本数据类型:数值型-整数类型(byte、short、int、long)-浮点类型(float、double)字符型(char)布尔型(boolean)基本数据类型有各自的包装类,包装类的特点如下:拥有属性、方法,可以对象化交互java包装在 java.lang中java中包装类没有子类,不允许被继承数值类型的包装类都继承 Number类布尔类型和字符类型 继承Object...原创 2021-03-05 12:49:44 · 269 阅读 · 0 评论 -
懒汉模式和饿汉模式
饿汉式PK懒汉式1.饿汉式线程安全2.懒汉式存在线程风险懒汉式存在线程风险解决方法:1.同步锁2.双重校验锁3.静态内部类4.枚举.单例模式的优点:1.在内存中只有一个对象,节省内存空间2.避免频繁的创建销毁对象,提高性能3.避免对共享资源的多重占用单例模式缺点:1.扩展比较困难2.如果实例化后的对象长期不利用,系统将默认为垃圾进行回收,造成对象状态丢失。单例模式使用场景:1.创建对象时占用资源过多,但同时又需要用到该类对象2.对系统内资源要求统一读写,如读写配置信息3.原创 2021-03-03 18:03:43 · 317 阅读 · 3 评论 -
选择排序算法
public class Choose { /** * 高服用的选择排序法 * @param args */ public static void main(String[] args) { Integer[] a={2,5,3,6}; Choose.chooseTo(a); for (int a1:a) { System.out.print(a1+" "); }原创 2021-03-01 12:21:52 · 83 阅读 · 0 评论 -
线性查找算法
线性查找高复用:public class Test { public static void main(String[] args) { //线性查找 int a[] ={1,2,3}; Integer w[] ={3,5,6,8}; Test t=new Test(); int res= t.LineSearch(w,8); /* int result=-1; Sca原创 2021-03-01 12:20:04 · 114 阅读 · 0 评论 -
equals、toString、final修饰符
equals :继承Object中的equals方法时,比较的是俩个引用是否指向同一个对象,如果类似与String类重写equals方法,就会根据具体的重写方法来定,String类是比较的数值是否相等重写的时候要注意参数是否为空的判断增强程序的健壮性。toString:1.输出对象名时,默认会直接调用类中的toString2.继承Object中的toString方法时,输出对象的字符串表示形式:类型信息+@+地址信息3.子类可以通过重写toString方法的形式,改变输出的内容以及表现形式。继承原创 2021-03-01 11:07:48 · 120 阅读 · 1 评论 -
线程的五种状态
线程有哪些状态:首先线程通常都有五种状态,创建、就绪、运行、阻塞以及死亡。创建状态:在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。就绪状态:当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。运行状态:线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。阻塞状态:线程正在运行的时候,被原创 2021-03-01 00:43:12 · 209 阅读 · 0 评论 -
runnable 和 callable的区别
runnable 和 callable 有什么区别:1.Runnable接口中的run()方法的返回值是void,它做的事情只是纯粹地去执行run()方法中的代码而已2.Callable接口中的call()方法是有返回值的,是一个泛型,和Future、FutureTask配合可以用来获取异步执行的结果...原创 2021-02-28 22:56:58 · 229 阅读 · 0 评论 -
创建线程的方式
创建线程有哪几种方式:继承Thread类创建线程类定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。创建Thread子类的实例,即创建了线程对象。调用线程对象的start()方法来启动该线程。通过Runnable接口创建线程类定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。创建 Runnable实现类的实例,并依此实例作为Thread的targ原创 2021-02-28 22:55:04 · 60 阅读 · 0 评论