java
文章平均质量分 68
sayhitoloverOvO
Say hi to lover,
Lie down in heart,
Lie down in soul.
Say hi to voice,
Lie down in head,
Lie down in phone.
Say hi to myself,
Tell me not alone.
Say hi to memories,
Where I have to go?
展开
-
java的内存泄漏和溢出,堆栈的溢出
内存溢出和内存泄漏内存溢出 OOM(out ofmemory)是指在申请内存时,没有足够的内存空间供其实用,出现out of memory;比如申请一个integer,但是给它存了long才能存下的数据,那就是内存溢出内存泄漏 memory leak是指程序在申请内存后,无法释放已申请的内存空间,一次泄露危害可以忽略,但内存泄漏堆积后果很严重,无论多少内存,迟早被占光。内存泄漏会导致内存溢出!内存溢出就是你要求分配的内存超出系统能给你的,系统不能满足需求,于是产生内存溢出。内存泄转载 2021-10-28 18:51:49 · 934 阅读 · 2 评论 -
spring的代理模式
基于目标对象创建代理对象,并由代理对象控制目标对象的执行基于OCP原则扩展目标对象的功能(装饰模式也可以做到)代理模式场景Mybatis(为接口创建代码,拦截器应用)Spring(proxy,CGLib代理)角色构成Subject:抽象主题角色(可以省略,基于CGLIB创建代理对象)Proxy:代理主题角色(代理对象)RealSubject:真是的主题角色(目标对象角色)强化分析1.Mybatis中mapper接口的代理2.JDK动态代理(Spring..原创 2021-10-26 09:18:31 · 470 阅读 · 0 评论 -
多线程下的单例模式(线程安全)——懒加载
package springboot.rabbit.controller; public class Singleton{ //使用volatilt关键字修饰,可以阻止CPU指令重排,并保证其可见性 private volatile static Singleton singleton = null; //私有化构造方法,确保不会在其他地方产生新的对象 private Singleton() { System.out.println("new Singleton-------");.转载 2021-10-25 09:31:17 · 712 阅读 · 0 评论 -
EasyExcel的简单使用
什么是EasyExcel?是阿里巴巴开源的excel处理框架,以使用简单,节省内存著称,在读取数据的时候是从磁盘一行一行的读取数据,逐个解析,而不是全部加载到内存中。支持Excel的导入与导出,支持xls和xlsm的文件格式EasyExcel的依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId>原创 2021-10-22 16:52:29 · 516 阅读 · 0 评论 -
面试题(四)
默认类型和包住类型的区别包装类型默认null,基本类型不为null包装类型可以作用于泛型,基本类型不行基本类型在栈中可以直接存储具体数值,而包装类型则存储的是堆中的引用。HashMap和hashTable的区别HashMap线程非安全,HashTable线程安全HashMap集成自AbstractMap,继承自DictionaryHashMap:null可以作为键(放在hash桶的第0个位置)HashTable:key和value都不允许出现null值,否则抛出NullPoi转载 2021-10-21 20:55:51 · 176 阅读 · 0 评论 -
面试题整理
Jvm内存分为本地方法栈,方法区,java栈,java堆本地方法栈:储存本地方法,主要由natuve修饰java堆:储存对象分为年轻代(eden区,form区,to区),老年代java栈:储存变量的值或是对象的引用方法区 储存有statuc修饰的变量,方法代码块以及常量java多线程项目前端 下载文件后端,大部分的服务,异步处理,给不同的用户发信息,加载数据活锁,程序的运行条件不满足,等待资源满足会运行...原创 2021-10-19 19:10:55 · 179 阅读 · 0 评论 -
什么是索引
什么是索引索引(index)是帮助mysql高效获取数据的数据结构,mysql索引主要有两种结构:BTree索引和Hash索引,平时的索引一般都是BTree索引。优点:可以提高查询速度 创建唯一索引,保证数据唯一性 加速表与表的连接,也别输在实现数据的参考完整性方面特别有意义 在使用分组和排序字句进行数据检索时同样可以显著减少查询中分组和排序的时间。 通过使用索引们可以在查询中的过程中,使用优化隐藏器,提高系统的性能缺点:占用空间 减缓增删改的速率 创建和维护需要耗费时间索引原创 2021-10-18 20:49:17 · 609 阅读 · 0 评论 -
Springboot启动项流程
初始化阶段:第一步:SpringApplication模块初始化,配置一些基本的环境变量,资源,监听器,构造器;第二步,实现了应用具体的启动方案,包括流程的监听模块,加载配置环境模块以及创建上下文环境模块第三步:自动化配置模块,这个模块是实现spring boot的自动配置启动阶段:每个springBoot程序都有一个主入口,也就是main方法,main方法调用springApplication.run()启动整个spring boot程序,该方法所在的类有一个@SpringBootAp原创 2021-10-14 14:30:54 · 518 阅读 · 0 评论 -
java双重校验
第一重校验,外层校验,保证业务逻辑,对没有数据的线程进行处理(获取数值,并将其存入本地缓存)在校验之后需要进行更改的时候,对资源进行上锁,保证线程的安全,进行对资源的操作是同步的第二重校验,保证后续其他线程不再需要执行对资源的操作(已经获取到数值的线程,不需要再执行,减少同步执行的代码量)public class ListTest { static List<Integer> cache = new ArrayList<>(); static List&转载 2021-10-14 10:29:46 · 528 阅读 · 0 评论 -
Spring IOC的理解,Bean的生命周期
spring IOC有两个核心思想就是ioc控制反转和DI依赖注入ioc控制反转的基本思想是,将原先的对象控制从使用者控制,转交给了spring来控制管理DI注入就是将对应的熟悉值注入到具体的方法之中spring提供@Autowired和@Resource等注解注入对象会存储在map中,在spring使用map结构的singletonObjects存放完整的bean对象整个bean的生命周期从创建到销毁的过程都由sprin来管理bean的生命周期bean的生命周期主要分为初始化使转载 2021-10-02 14:02:44 · 571 阅读 · 0 评论 -
线程的理解
什么是线程,有什么优缺点?一个程序包含多个进程,一个进程包含多个线程,线程是执行程序的最小单位多线程的好处:发挥处理器的最大能力,异步事件的简化处理,相应更加迅速线程的生命周期和状态5+35个状态,三种阻塞线程使用创建线程的方法1.继承Thread()类,2继承Runnable接口3.线程池的方法4.有返回值的Callable创建线程但是在源码里,最终使用的方法都是构造一个Thread的类型的类在start()中调用start0()创建线程关闭线程调.转载 2021-10-02 18:01:59 · 143 阅读 · 0 评论 -
线程池的理解
什么是线程池,有什么优缺点?线程池是一个享元模式的设计模式是一个容器,内部含有多个线程,自主控制线程的生命周期,使用时直接获取,使用完后将线程再交还回去,减少了创建线程,销毁线程的开销降低资源的消耗,重复利用已经创建的线程,提高响应的速度提高线程的可管理性,同一份匹配,调优,监控线程池的使用和工作机制我们一般使用TreadPoolExecuror创建线程池,提交execute()方法和submit()方法execute()方法作用于提交不需要返回值的任务,所以无法判断线程是否转载 2021-10-02 17:10:38 · 507 阅读 · 0 评论 -
java常用jar包总结
<!-- 添加web启动依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Mysql驱动依赖 ...原创 2021-09-26 20:18:11 · 258 阅读 · 0 评论 -
Spring AOP代理失效情况
Spring在程序运行期,就能帮助我们把切面中的代码织入Bean的方法内,让开发者能无感知地在容器对象方法前后随心添加相应处理逻辑,所以AOP其实就是个代理模式。但凡是代理,由于代码不可直接阅读,也是初级程序员们 bug 的重灾区。1 案例使用this方法,调用本类的某个方法,统计该方法的调用时间@Servicepublic class DoSomething(){ public void work(){ this.do(); } public v转载 2021-09-26 19:48:58 · 2116 阅读 · 2 评论 -
代理对象的创建方法
代理模式:在不改变原有类的请胯下,为类扩展功能手写代理对象麻烦,费时费力。容易出错public class ProxyList<E> implements List<E> { private List<E> target; @Override public synchronized boolean add(E e) { target.add(e); return false; }原创 2021-09-28 20:09:47 · 1053 阅读 · 0 评论 -
Spring面试(一)
什么是 spring?Spring是个java企业级应用的开源开发框架 。Spring主要用来开发 Java应用,但是有些扩展是针 对构建J2EE 平台的web应用 。Spring 框 架目标是简化Java企业级应用开发,并通过 POJO为基 础的编程模型促进良好的编程习惯 。使用Spring框架的好处是什么?轻量:Spring 是轻量级的,大小只有2MB,非入侵式控制反转:Spring通过控制反转实现了松散耦合,对象给出他们的依赖,而不是创建或查找依赖的对象们面向切面编程AOP:Sp.转载 2021-09-25 15:39:53 · 122 阅读 · 0 评论 -
缓存redis
缓存redis:在服务器内部存储sql的查询结果,如果有结果,就将查询结果缓存,下次再有查询直接先查询缓存,减少数据库的访问量,加快程序反应速度内部是(k,v)的结构缓存击穿:某个数据缓存失效时,大量请求涌入数据库,(访问同一个商品)解决方式:设置缓存永不过期 增加互斥锁,只有一个请求可以到达数据库,其他请求稍后返回缓存(redis)中,(访问多个商品)缓存雪崩多个数据缓存失效后,导致大量查询请求涌入数据库设置数据永不过期, 设置缓存失效为随机,避免缓存同时失效, 设原创 2021-08-24 08:52:52 · 77 阅读 · 0 评论 -
java断言
背景介绍1.4之前常用注释来记录层序正确性的假设,然而,注释作为测试和调试假设的机制是无用的,因为无法用他们进行bug检测,开发人员在更改代码时也经常不经常更新注释实质上,断言是在运行时执行的可编译实体,假设你已经为程序测试启用了它们。可以通过编写断言来通知 bug 发生的地方,这样可以大大减少调试失败程序的时间。断言的表达式:assert BooleanExpr;assert 语句的执行导致抛出AssertionErrorpublic static void main(Str原创 2021-09-24 09:10:17 · 648 阅读 · 0 评论 -
JVM结构及GC(垃圾回收)详解
GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。移动智能终端用户通常觉得iOS的系统比Android系统有更好的用户体验,其中一个深层次的原因就在于Android系统中垃圾回收的不可预知性。JVM年轻代:主要存放新建对象,垃圾回收会比较频繁。创建对象在堆是,将进入年轻代的Eden(最常见的GC处理部分).转载 2021-09-20 15:34:07 · 370 阅读 · 0 评论 -
使用idea设置自动发送邮件
第一步添加依赖,没错还是它:<!-- 邮件服务 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency><dependency> <groupId>org.spring转载 2021-09-19 18:04:53 · 1517 阅读 · 0 评论 -
面试题:设计模式
简单工厂和抽象工厂的区别简单工厂模式:这个模式很简单,而且使用在较为简单的情况下,一般用于小项目或者铲平很少扩展的情况(这样的工程类才不用经常更改)它由三种角色组成:工程类角色:这是本模式的核心,干有一定的商品逻辑和判断逻辑,根据逻辑的不同和,产生具体类的工程产品。如例子中的Driver类抽象产品角色:它一般是具体产品继承的父类或是实现类的接口。由接口或者抽象类来实现,如例中的Car接口具体产品角色。工厂创建的对象实例。在java中由一个具体的实现类实现,如例子中的Benz,Bmw类转载 2021-09-18 19:28:07 · 113 阅读 · 0 评论 -
面向对象的“六原则一法则”
单一职责原则,一个类只作它该做的事情开闭原则:软件实体对扩展开发,修改关闭。抽象是关键,封装可变性依赖倒转原则:面向接口编程,尽可能使用抽象类而不是具体类里氏替换原则:任何时候使用子类型替换父类型,接口隔离原则:接口要小而专,而不是大而全,接口表示能力,且只描述一种能力,增加复用性合成聚合复用原则:优先使用聚合或合成关系复用代码迪米特法则,最少知识法则,一个对象应尽量对其他对象尽可能少的了解,降低耦合度...原创 2021-09-17 20:10:26 · 243 阅读 · 0 评论 -
微服务扩展03: System.out.println(打印)和log(日志)
平常做编程检查的时候,你是否会写多写个System.out.println()在编程阶段,来帮助自己检查程序呢?System.out.println()方法,使用简单,后续维护不方便,需要手动删除 @GetMapping("findItemCatList2") public SysResult findItemCatList2( PageResult pageResult ){ //查询输入的数据 System.out.println(pageResu原创 2021-09-17 14:01:35 · 4991 阅读 · 0 评论 -
面试题:反射
什么是反射?主要是指程序可以访问,修改,检测它本身状态或是行为的一种能力java反射java运行时的环境中,对任意一个对象,方法,都可以进行调用获取任意一个对象的所属类构造任意一个类的对象获取一个类的所有方法和成员变量调用任意一个对象的方法什么是java的序列化?将保存的对象再读出来,把内存的对象保存到一个文件或者数据库中RMI传输对象网络上传输对象什么是动态代理动态代理就是AOP是对方法的扩展怎么实现动态代理产生一个代理类,再使用原方法时原创 2021-09-15 20:26:51 · 64 阅读 · 0 评论 -
多线程面试题
并行和并发有什么区别?并行:多个线程,一个cpu一件一件处理并发:多个线程,多个cpu同时运行线程和进程的区别一个程序至少1个线程,一个进程至少一个线程,进程在执行过程中转载 2021-09-15 19:35:22 · 72 阅读 · 0 评论 -
IO流模型
BIO,NIO,AIO的区别BIO同步阻塞式IO Block IO,就是我们将平常使用的传统IO,它的特点是模式简单,使用方便NIO同步非阻塞IO New IO,是传统IO的升级版,客户端和服务器通过Channel(通道)通讯,实现了多路复用AIO异步非阻塞IO Asynchronous IO,是NIO的升级版,也叫NIO2,实现了异步非阻塞IO异步IO的操作基于时间和回调机制...转载 2021-09-14 20:11:09 · 144 阅读 · 0 评论 -
Spring如何解决循环依赖
单例注入bean是如何解决循环依赖问题呢?假设循环注入是A-B-A:A依赖B(A中autowire了B),B又依赖A(B中又autowire了A):@Componentpublic class A { private B b; public void setB(B b) { this.b = b; }}@Componentpublic class B { private A a; public void setA(A a) { this.a = a; ...转载 2021-09-11 18:01:42 · 90 阅读 · 0 评论 -
面试题总结2
JVM什么情况下会发生内存溢出?线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常。如果虚拟机在动态扩展栈的时候无法申请到足够的内存空间,则抛出OutOfMemoryError异常jvm的内存结构Young(New):virtual to form EdenTenured(Old)Permjvm中一次完整的GC流程是怎样的对象诞生即新生代->eden 在gc过程中如果依旧存活,移动到from,编程Survivor,进行标记代数,检查一转载 2021-09-11 17:48:39 · 70 阅读 · 0 评论 -
Spirng MVC前端参数传递
1.在URL后使用?和&拼接数据http://localhost:8090/findUserById?id=1查询id等于1的对象优点传输方便,引用广泛(请求类型: GET/DELETE /POST/PUT) 可以直接使用id属性,或者对象获取参数@GetMapping("/getUserlist")//使用public SysResult getUserlist(PageResult pageResult){ System.out.println("用户列表展.转载 2021-09-11 10:31:06 · 87 阅读 · 0 评论 -
类的生命周期1
平时我们编写的代码都是.java文件,他是怎么运行到机器上的呢?通过打开jar包或war包,然后运行部署jiar包中我们的.java源码都编译成为了.class文件这笔发生了一个很重要的步骤编译:将我们的程序翻译成能被jvm读懂的文件格式值得注意的是,每一个类都会被编译成一个.class文件,包括内部类等。也就是说每一个.class文件都只对用我们代码中的一个类类的生命周期被加载到jvm虚拟机内存开始,到卸载出内存为止,他的生命周期可以分为:加载--验证--准备--解析--初始化--转载 2021-09-08 10:07:31 · 64 阅读 · 0 评论 -
为网页展示创建分页设置
参照商品分类id=6的标签,添加一个商品分类2,在新的标签中完成分页操作复制一个itemcat.vue页面,命名为itemcat2.vue在index.js添加新页面的路由导向为itemcat2.vue添加搜索框与分页标签 <!-- 2.1定义一行 使用栅格--> <el-row :gutter="20"> <el-col :span="9"> <!-- 3.定义...原创 2021-09-07 17:30:38 · 494 阅读 · 0 评论 -
spring事务失效的12种场景
事务如果后台服务器发生问题,则数据信息应该回滚,而不是提交操作.事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间.转载 2021-09-06 19:51:16 · 280 阅读 · 0 评论 -
数据自动填充与全局异常处理机制
业务需求说明如果后台发生运行时异常时,应第一时间通知用户否则用户没有任何提示.影响用户体验.分析:页面没有提示的原因是服务器没有返回201的报错数据 后端服务器报错后没有异常处理机制异常的处理是项目进程用到的机制,大阪市如果将大量的异常代码写在方法中,则影响查询的结构导致代码混乱全局异常处理用法使用AOP来处理全局异常AOP说明:名称: “面向切面编程”作用: 在不影响源码的条件下,对方法进行扩展,降低了业务的耦合性.通知:1.前置通知: before2.后置通知: .转载 2021-09-06 18:32:24 · 93 阅读 · 0 评论 -
类的生命周期2
类的生命周期java类的生命周期就是指一个class文件从加载到卸载的全过程。完整的生命周期分为7个部分:卸载——验证——准备——解析——初始化——使用——卸载其中,验证,准备,解析 称之为链接阶段,除了解析以外,其他阶段是孙旭发生的,而解析可以与这些阶段交叉进行,因为Java支持动态绑定,需要运行时才能缺点具体内容;在使用阶段实例化对象。类的初始化类的加载机制没有明确的触发条件,但是有5种情况必须对类进行初始化,所以加载--验证--准备 就必须在此之...原创 2021-09-04 17:59:11 · 107 阅读 · 1 评论 -
对象的生命周期
在JVM的运行空间中,对象的生命周期大概可以分为7各阶段:创建阶段(creation)应用阶段(Using)不可见阶段(invisible)不可到达阶段(Unreachable)可收集阶段(Collected)终结阶段(Finalized)释放阶段(Free)创建阶段(creation)在创建对象阶段,系统要通过下面步骤,完成对象的创建过程:1).为对象分配存储空间2).开始构造对象3)递归调用其他超类的构造方法(递归调用该类所扩展的所有父类的构造方法)4转载 2021-09-04 17:38:46 · 1029 阅读 · 0 评论 -
进程与线程的认知强化
1.如何理解进程与线程安全?进程:操作系统进行资源调度和分配的基本单位(列入浏览器,app,jvm)线程:进程中的最小执行单位(可以理解为一个顺序的执行流)。多个线程可以共享所属进程的所有资源。2.如何理解多线程中的并行与并发并发:多线程抢占cpu,不能同时执行,侧重于多个任务交替执行。(异步)对于cpu来说,同一时间只可以干一件事情。为了实现同时多件是,分时操作将cpu划分位长短基本相同的时间片,通过操作系统的管理,把时间片依次轮流分配给各个线程任务使用,我们看似同时干多件事情,其实是原创 2021-08-31 08:49:55 · 93 阅读 · 0 评论 -
异常及throws和throw的区别
异常Throwable异常就是异于常态,和正常状态不一样,有错误出现,防止当前方法或作用域的情况称之为异常异常的分类:异常分为Error错误和Exception异常。Error错误程序无法处理的错误,一般表示代码运行时jvm出现了问题,虚拟机运行错误 类定义错误 内存耗尽错误此类错误会发生错误时,JVM将终止进程,非代码性错误,因此发生错误时,应该不应该去处理改异常Exception 异常,是程序可以捕获处理的异常 运行时错误RuntimeExcepti...原创 2021-08-30 19:14:10 · 196 阅读 · 0 评论 -
程序中的锁
多线程互相等待,已经被对方线程正在被占用的锁,导致彼此陷入等待对方释放锁的状态,这种过程被称为死锁避免死锁避免一个线程中获取多个锁避免一个线程在同一个锁之中获取其他资源考虑使用时间锁...原创 2021-08-30 18:35:58 · 978 阅读 · 0 评论 -
Vue双向数据绑定(v-model)的使用与Vue的生命周期
双向数据绑定(v-model)双向绑定作用地点: 用户可以录入的标签input:1.test 2.单选框 3.多选框 4.下拉框 5.文本域将V-model获取的内容转换成数值内容<input type="number" v-model.number="(用户输入的内容)"/>懒加载方式,用户提交触发<input type="test" v-model.lazy="msg"/>{{msg}}...原创 2021-08-27 09:31:06 · 666 阅读 · 0 评论 -
项目基础总结:三大框架,前端,服务器,数据库
数据库(从删库到跑路)数据库不区分大写小写什么是数据库?DB(date base) 储存数据,管理数据的地方常见的数据库:关系型数据库: Oracle,mysql,Access,SQLServer 有特定的组织方式,以行和列的方式支持表来储存数据关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据集合。非关系型数据库:MongoDB,Redis,Solr,Hive... 去掉了关系型数据库的关系类型特征,以...原创 2021-08-26 20:51:16 · 162 阅读 · 0 评论