
java基础
文章平均质量分 52
种向日葵的小仙女
这个作者很懒,什么都没留下…
展开
-
JVM内存泄漏
如果一个对象能用根搜索法搜索到,但是这些对象是无用的,即程序以后不会再使用这些对象。那么这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。容易引起内存泄漏的原因如下:1) 静态集合类,例如HashMap和Vector。这些容器是静态的,由于他们的生命周期与程序一致,那么容器中的对象在程序结束之前将不能被释放,从而造成内存泄漏。2) 各种连接,例如数据库连接、...原创 2018-04-11 20:15:59 · 1497 阅读 · 0 评论 -
Java 并发工具包 java.util.concurrent 用户指南
译序本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.jenkov.com/java-util-concurrent/index.html。本指南已做成中英文对照阅读版的 pdf 文档,有兴趣的朋友可以去 Java并发工具包java.util...转载 2018-04-06 21:22:23 · 194 阅读 · 0 评论 -
wait()和sleep()的区别
sleep()是使线程暂停执行一段时间的方法。wait()也是一种使线程暂停执行的方法。例如,当线程执行wait()方法时候,会释放当前的锁,然后让出CPU,进入等待状态。并且可以调用notify()方法或者notifyAll()方法通知正在等待的其他线程。notify()方法仅唤醒一个线程(等待队列中的第一个线程)并允许他去获得锁。notifyAll()方法唤醒所有等待这个对象的线程并允许他们去......原创 2018-04-06 22:24:12 · 33621 阅读 · 5 评论 -
Structs框架
struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。优点: (1) 实现了MVC模式,层次结构...原创 2018-05-09 10:40:43 · 17065 阅读 · 0 评论 -
Hibernate和 Mybatis 区别
1 简单简介 1.1 Hibernate 框架 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据库表的映射。是一个全自动的、完全面向对象的持久层框架。 1.2 Mybatis框架 Mybatis是一个开源对象关系映射框架,原名:ibatis,2010年由谷歌接管以后更名...原创 2018-05-09 10:48:55 · 214 阅读 · 0 评论 -
Hibernate一级缓存二级缓存
缓存的目的是为了通过减少应用程序对物理数据源访问的次数来提高程序运行的效率,原理则是把当前或接下来一段时间可能会用到的数据保存到内存中,在使用时直接从内存中读取,而不是从硬盘中去读取,简单来说,缓存就是数据库中数据在内存中的“临时容器。 在 Hibernate中,缓存用来把从数据库中查询出来的和使用过的对象保存在内存中,以便在后期需要用到这个对象时可以直接从缓存中来获取这个对象(只有...原创 2018-05-09 11:13:35 · 252 阅读 · 0 评论 -
队列 take poll几种方法
原创 2018-05-18 09:09:23 · 21314 阅读 · 1 评论 -
Static关键字
1) 静态变量:静态变量可以达到全局变量的效果。只要静态变量所在的类被加载,这个静态变量就会被分配内存空间,因此将就可以被使用了。对静态变量的引用有两种方式,分别为类.静态变量和对象.静态变量。静态变量只有一个,被类拥有,所有对象都共享这个静态变量。实例对象适合具体对象相关的。2) 静态成员方法:静态方法是类的方法,不需要创建对象就可以调用。类.静态方法。非静态方法需要创建对象才可以被调用。静...原创 2018-04-12 17:30:11 · 146 阅读 · 0 评论 -
多线程、多进程的区别及适用场景
对于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”。多线程占相比于多进程占用内存少、CPU利用率高,创建销毁,切换都比较简单,速度很快。多进程相比于多线程共享数据复杂,需要将进程间通信。但是同步简单,多线程因为数据共享简单,导致同步复杂。多进程编程调试都比多线程简单。进程之间互相不影响,一个线程挂掉将导致整个进程挂掉。多进程适合多核,多机分布,多线...原创 2018-04-11 21:05:11 · 4395 阅读 · 0 评论 -
线程间通信方式
说到线程之间通信方式:主要是有两种吧1.是通过共享变量,线程之间通过该变量进行协作通信。2.通过队列(本质上也是线程间共享同一块内存)来实现消费者和生产者的模式来进行通信。1. 通过线程之间共享变量的方式这个就有必要说下wait(),notify(),以及notifyAll() 这三个方法。这三个方法都是属于Object的方法;所以所有类都可以继承这三方法;wait()方法使得当前线程...原创 2018-04-11 21:47:28 · 384 阅读 · 0 评论 -
ThreadLocal的设计理念与作用。
ThreadLocal是线程局部变量。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。如何创建ThreadLocal变量以下代码展示了如何创建一个ThreadLocal变量:我们可以看到,通过这段代码实例化了一个Thre...原创 2018-04-04 20:28:17 · 1173 阅读 · 0 评论 -
AQS原理
1. 什么是AQS?AQS的核心思想是基于volatile int state这样的volatile变量,配合Unsafe工具对其原子性的操作来实现对当前锁状态进行修改。同步器内部依赖一个FIFO的双向队列来完成资源获取线程的排队工作。2. 同步器的应用同步器主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态,对同步状态的修改或者访问主要通过同步器提供的3个方法:getSt...原创 2018-04-12 10:42:04 · 183 阅读 · 0 评论 -
Java中的锁
注:转自朱小厮的博客。原博客地址: https://blog.youkuaiyun.com/u013256816/article/details/51204385 在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁、非公平锁、自旋...转载 2018-04-12 10:58:49 · 217 阅读 · 0 评论 -
ThreadPool用法与优势。
1. 线程池的优点:合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。2....原创 2018-04-05 16:25:19 · 10966 阅读 · 0 评论 -
大端小端
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。...原创 2018-04-12 15:33:12 · 202 阅读 · 0 评论 -
僵尸进程、孤儿进程、守护进程、守护线程、join
1) 守护进程、守护线程:守护进程会等待主进程代码运行完毕后被销毁,然后主进程会一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束。守护线程会等待主线程所在的进程内所有非守护线程统统运行完毕后被销毁。守护线程的例子,垃圾回收器,只要JVM启动,他始终在运行,实时监控和管理系统中可以被回收的资源。2) 孤儿进程:一个父进程退出,而它的一个或多个子进程还在...原创 2018-04-12 16:33:54 · 1285 阅读 · 0 评论 -
final、finally、finallize
1) final用于声明属性、方法和类。分别表示属性不可变、方法不可被覆盖、类不可被继承。一个类不能既被声明为final又被声明为abstract。Final属性:被final修饰的变量不可变。不可变有2个意思,一个是引用不可变,一个是对象不可变。Final指的是引用不可变,即他只能指向初始时指向的那个对象,而不关心指向对象的内容是否变化。2) Finally:作为异常处理的一部分,他只能用在...原创 2018-04-12 17:29:22 · 521 阅读 · 0 评论 -
谈谈Spring中的IOC和AOP概念
IOC和AOP是Spring中的两个核心的概念,下面谈谈对这两个概念的理解。1. IOC(Inverse of Control):控制反转,也可以称为依赖倒置。 所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B。所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B,如果不倒置,意思就是A主动获取B的实例:B b ...转载 2018-05-07 17:19:14 · 179 阅读 · 0 评论 -
简单的谈一下SpringMVC的工作流程
流程 1、用户发送请求至前端控制器DispatcherServlet 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4、DispatcherServlet调用HandlerAdapter处理器适配器 5、HandlerAdap...原创 2018-05-21 11:07:10 · 1570 阅读 · 0 评论 -
有人把公司内网的信息截图泄露到外面,如何找出截图的人?
1.重要图片或者文档里面加水印(傅里叶变换,时域到频域,傅里叶逆变换)。2. 所有终端监控敏感操作:另存、截图、剪贴板等操作进行监控,有上述行为一律上传到审计服务器上备份待查。3. 禁止未授权(未安装终端防护程序)的终端接入内网和业务系统。4. 有敏感操作通过摄像头拍摄人脸。5. 定期对硬盘进行文件扫描,关键字、相似度等方法识别出可能是敏感或者涉密的文件,并提取特征,进行标定。6. 同样采用散列值...原创 2018-07-10 10:48:19 · 3502 阅读 · 0 评论 -
String实现 intern
0.引言什么都先不说,先看下面这个引入的例子:[java] view plain copyString str1 = new String("SEU")+ new String("Calvin"); System.out.println(str1.intern() == str1); System.out.println(str1 == "SEUCalvin");...转载 2018-07-16 20:53:22 · 213 阅读 · 0 评论 -
JDK、JRE和JVM三者之间关系
原创 2018-07-03 22:31:26 · 197 阅读 · 0 评论 -
为什么需要编码?UTF-8和GBK是如何进行编码的
编码是为了在数据传输的过程中节省数据存储空间,可以节省带宽,加快传输速度。UTF-8:英文一个字节,中文3个字节。它可以使用1~4个字节表示一个符号GBK:英文两个字节,中文2个字节。UTF-8 是 Unicode 的实现方式之一。我们已经知道,英文字母只用一个字节表示就够了,如果 Unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是...原创 2018-07-04 16:09:42 · 2586 阅读 · 2 评论 -
贪吃蛇
1.把蛇的每一块看成一个对象,块与块之间用链表进行相连。所以整条蛇的结构是LinkedList的结构。LinkedList里面每一个对象为point结构(point类是一个点类,表示的是x,y)。就是蛇的每一块的横坐标和纵坐标。蛇是会动的,实际上就是插入一个头结点,删除一个尾节点。新插入的头结点根据蛇的当前方向决定。设置一个变量标志蛇的方向(可以通过按键改变)2.蛇移动到边界会退出游戏。2.食物也...原创 2018-07-04 16:41:03 · 220 阅读 · 0 评论 -
java读取文件的方法
流可以分为字节流和字符流,字节流是以字节为单位(8比特),包含2个抽象类(inputstream、outputstream)。字符流是以字符为单位(16bit)。根据码表映射字符,一次可以读取多个字节,包含2个抽象类,reader,writer。主要区别:字节流在处理输入输出时不会用到缓存,而字符流用到了缓存。JAVA读取文件的方式:1.inputstream ,以字节为单位读取文件,常用于读...原创 2018-07-19 22:24:13 · 800 阅读 · 0 评论 -
子查询和关联查询的区别
子查询就是查询中又嵌套的查询,表连接都可以用子查询,但不是所有子查询都能用表连接替换,子查询比较灵活,方便,形式多样,适合用于作为查询的筛选条件,而表连接更适合与查看多表的数据。子查询不一定需要两个表有关联字段,而连接查询必须有字段关联(所谓的主外键关系)1,表关联的效率要高于子查询,因为子查询走的是笛卡尔积2,表关联可能有多条记录,子查询只有一条记录,如果需要唯一的列,最好走子查询...原创 2018-07-19 22:30:02 · 12088 阅读 · 5 评论 -
正向代理和反向代理
1. 正向代理:比如,客户端要访问Google,但是不直接去访问,而且让一个代理服务器去访问Google,然后代理服务器再将访问到的信息返回给客户端。这里的代理服务器所实现的功能就叫做正向代理。特点:Google并不知道是哪个客户端访问的。客户端要进行一些设置才能使用正向代理。根据这个特点,我们就可以在国外部署一个代理服务器,这个服务器有正向代理的功能。我们就可以通过这个代理服务器实现科学...原创 2018-07-25 20:16:27 · 385 阅读 · 0 评论 -
JavaWeb秒杀业务场景设计
秒杀业务场景设计问题经常被面试的时候被问到,在实际业务中,也常常需要实现,下面我们来看看如何实现秒杀业务.秒杀业务,是典型的短时大量突发访问类问题特点:秒杀时网站的访问量大增;秒杀时购买的请求数量远小于库存,只有部分用户能够成功;业务流程简单,根据先后顺序,下订单减库存;首先看一下普通商品购买业务的基本逻辑 C1.png 那么,秒杀业务,会影响到上面的哪些方面...转载 2018-08-21 11:32:14 · 339 阅读 · 0 评论 -
注解
1.什么是注解注解就像是标签,想象代码具有生命,注解就是对于代码中的鲜活个体贴上标签。2.注解的定义注解通过 @interface 关键字进行定义。public @interface TestAnnotation {}12上面的代码就创建了一个名字为 TestAnnotaion 的注解。你可以简单理解为创建了一张名字为 TestAnnotation 的标签。3.注解的应用上面创建了一个注解,那么...原创 2018-06-20 10:49:40 · 192 阅读 · 0 评论 -
枚举类
枚举类可以实现接口,但不能继承类,因为所有枚举类都继承自java.lang.Enum(由编译器添加),同时java不支持多继承。原创 2018-06-19 21:20:37 · 169 阅读 · 0 评论 -
Spring中Bean的理解以及@Bean的作用
Bean在Spring和SpringMVC中无所不在,将这个概念内化很重要,下面分享一下我的想法: 一、Bean是啥1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化); 2、凡是有方法或属性的类都需要实例化,这样才能具象化去使用这些方法和属性; 3、规律:凡是子类及带有方法或属性的类都要加上注册Bean到Spring IoC的注解; 4、把Bean理解为类的代理...原创 2018-05-21 11:43:47 · 2012 阅读 · 0 评论 -
IO包的设计模式
装饰模式:在由InputStream、OutputStream、Reader和Writer代表的等级结构内部,有一些流处理器可以对另一些流处理器起到装饰作用,形成新的、具有改善了的功能的流处理器。 适配器模式:在由InputStream、OutputStream、Reader和Writer代表的等级结构内部,有一些流处理器是对其他类型的流处理器的适配。这就是适配器的应用。...原创 2018-05-08 16:32:56 · 390 阅读 · 0 评论 -
bean的生命周期
Bean实例生命周期的执行过程如下:Spring对bean进行实例化,默认bean是单例;Spring对bean进行依赖注入;如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法;如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来;如果bean实现...原创 2018-06-11 16:43:27 · 4514 阅读 · 0 评论 -
happens-before原则
happens-before原则定义如下:1. 如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前。 2. 两个操作之间存在happens-before关系,并不意味着一定要按照happens-before原则制定的顺序来执行。如果重排序之后的执行结果与按照happens-before关系来执行的结果一致,那么...原创 2018-06-11 16:46:59 · 421 阅读 · 0 评论 -
三个线程保证顺序执行
第一种: 用Thread.join() 方法 确定该线程执行完毕,先创建线程1,然后创建线程2,在run()方法里面调用线程2.join(),接着创建线程3,在run()方法里面调用线程3.join() 第二种线程池 newSingleThreadExecutor 这个线程处理完一个任务后接着处理下一个任务。3个线程存到阻塞队列里面,单个后台线程池,队列先进先出...原创 2018-06-20 22:03:01 · 2544 阅读 · 0 评论 -
通过反射机制获取类的私有属性
通过反射机制创建对象、获取注解,spring aop jdk动态代理中反射机制创建代理对象,newproxyinstance()方法创建对象。实现步骤:1、首先创建一个类包含一个私有属性public class PrivateTest { private String name = "hello"; public String getName() { ...原创 2018-06-21 11:25:45 · 6601 阅读 · 0 评论 -
幂等性
幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品使用约支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条...步骤:1、查询订单支付状态2、如果已经支付,直接返回结果3、如果未支付,则支付...原创 2018-06-21 17:20:26 · 178 阅读 · 0 评论 -
Log4j日志
在应用程序中输出日志有有三个目的:(1)监视代码中变量的变化情况,把数据周期性地记录到文件中供其他应用进行统计分析工作。(2)跟踪代码运行进轨迹,作为日后审计的依据。(3)担当集成开发环境中的调试器,向文件或控制台打印代码的调试信息。通常,我们都提供一个名为log4j.properties的文件,在第一次调用到Log4J时,Log4J会在类路径(../web-inf/class/当然也可以放到其它...原创 2018-05-31 17:13:51 · 157 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jstat、jmap、jinfo使用详解
jcmd命令:主要提供JVM的一些基本信息查询(查看进程运行时间、查看虚拟机版本信息、显示调优标志)jinfo命令:查看进程ID号。查看JVM的配置参数。jps查看所有的jvm进程,包括进程ID,进程启动的路径等等。我自己也用PS,即:ps -ef | grep javajstack观察jvm中当前所有线程的运行情况和线程当前状态。系统崩溃了?如果java程序崩溃生成core文件,jstack工具...原创 2018-06-19 11:12:20 · 1135 阅读 · 0 评论 -
Spring Boot中controller的使用
详细解释:https://www.cnblogs.com/juncaoit/p/7751340.html原创 2019-07-16 09:38:16 · 483 阅读 · 0 评论