JDK

【奇淫巧技】Java动态代理(JDK和cglib)

时光怂恿深爱的人放手 提交于 2020-12-30 14:29:17
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。 代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为两种。 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:在程序运行时,运用反射机制动态创建而成。 首先看一下静态代理: 1、Count.java package net.battier.dao; /** * 定义一个账户接口 * * @author Administrator * */ public interface Count { // 查看账户方法 public void queryCount(); // 修改账户方法 public void updateCount(); } 2、CountImpl.java package net.battier.dao.impl; import net.battier.dao.Count; /** * 委托类(包含业务逻辑) * * @author Administrator *

20165201 2017-2018-2 《Java程序设计》第7周学习总结

*爱你&永不变心* 提交于 2020-12-30 04:30:29
20165201 2017-2018-2 《Java程序设计》第7周学习总结 教材学习内容总结 ###第十一章 连接数据库: Connection getConnection(java.lang.String, java.lang.String, java.lang.String) , Connection getConnection(java.lang.String) 条件与排序查询: where 子语句 排序 order by 子语句对记录进行排序 order by <字段名> 更新 update 表 set 字段 = 新值 where<条件子句> 添加 insert into 表(字段列表)value (对应的具体的记录) 删除 delete from 表名 where <条件子句> 事务:事务是由SQL语句组成的,事务处理是指:应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行 JDBC事务处理步骤 用setAutoCommit(booean b)方法关闭自动提交模式 用commit()方法处理事务 用rollback()方法处理事务失败 ##学习中的问题和解决过程 问题:我按照娄老师的教程下载并安装了xampp,之后在IDEA中进行了相关配置,但数据库一直连接不了...如下图: 问题解决方法:我问了我们班同样用Mac的同学,并在网上搜问题,结论就是

JVM的内存分代,这篇文章帮你理一理

放肆的年华 提交于 2020-12-29 23:25:54
听说微信搜索《Java鱼仔》会变更强哦! 本文收录于 JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 每天一个知识点 JVM的内存分代你了解多少? (一)JVM分代 堆内存是JAVA虚拟机所管理的内存最大的一块,Java堆被所有线程共享,几乎所有的对象实例都是在堆中分配内存,因此Java的堆是垃圾回收的主要区域。 JVM的内存分代讲的就是堆内存的分代,为了更加高效的回收垃圾,将内存划分为了多个generation(代)。 JVM堆可以划分为新生代、老年代、永久代(JDK1.7),在JDK1.8中,永久代被元空间(Metaspace)所代替,并且元空间已经不在堆中了。下面我们会讲两者的区别 (二)永久代和元数据的区别 永久代是HotSpot虚拟机特有的概念,并且在JDK1.8之后,永久代就彻底消失了。 永久代存储类信息、常量、静态变量、即时编译器编译后的代码等数据,并且永久代必须指定大小限制,因此就会导致性能问题和内存溢出的问题。永久代会给GC带来不必要的复杂性。 元空间的本质和永久代类似,但是元空间并不在堆中,而是直接使用了本地内存,元数据可以设置限制,也可以不设置,它的大小仅受本地内存限制。 (三)什么是新生代和老年代 新生代和老年代是垃圾回收最主要的区域,我们也主要来讲解这两个区域,看下图 新生代和老年代都在堆内存中

Hashmap jdk7 死循环

风流意气都作罢 提交于 2020-12-29 19:18:12
如果理解的有问题,欢迎大家指正。 https://www.cnblogs.com/webglcn/p/10587708.html jdk7的hashmap 由数组和链表组成,存在几个问题: 当key的hash碰撞频率高,导致链表内的数据过多,影响查询效率, 时间复杂度为O(n) 不同的key经过hash运算,结果落到同一个table的元素中,元素内部是链表结构,新增的数据会直接插入到链表的结尾。当查询的时候,首先通过hash找到元素在hashmap中的table位置,然后遍历链表找到元素,遍历的时间复杂度为O(n). 多线程并发操作hashmap,导致链表查询死循环。 并发扩容时,同时执行transfer方法,如果原始链表相邻的两个元素,扩容后仍是相邻的两个元素,由于采用了头插入,会造成两个元素形成互为首尾,形成死循环。举例如下。 初始状态hashmap 的初始大小为 2^n (n=1), hashmap的size是2, 插入两个元素3和7 两个线程对hashmap进行扩容(调用transfer), 假设 线程一 执行到获取第一个元素3,CPU调度到 第二个线程 , 第二个线程 完成了全部的扩容操作,由于扩容采用了头插法,元素7插入到元素3之前,并作为链表的第一个元素。此时状态为 线程一 采用头插法,形成死循环 参考文献 http://www.cnblogs.com

JVM-各内存区域抛出OutOfMemoryError异常分析

旧时模样 提交于 2020-12-29 17:49:03
OutOfMemoryError异常 注:本人测试基于jdk1.8测试,有部分不同但是原理可以了解,感兴趣可以下载jdk1.7配套测试 Java虚拟机规范中描述,除了程序计数器,虚拟机的其他几个运行时区域都有发生OOM异常的可能。 下面的示例代码都基于HotSpot虚拟机运行,设置VM参数可以在IDE的VM options内设置,如图 Java堆溢出 引发思路:Java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。 以下代码需要配置VM,设置java堆大小20MB,不可扩展(将堆的最小值-Xms参数与最大值-Xmx参数设置为一样即可避免堆自动扩展),-XX:+HeapDumpOnOutOfMemoryError可以让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便事后进行分析 -Xmx:最大堆大小 -Xmx20M -Xms20M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\jvmlog\oom.hprof 可以指定hprof文件存放位置,之后使用jdk自带工具jvisualvm.exe打开分析即可 import java.util.ArrayList; import java.util

ElasticSearch 入门总结

徘徊边缘 提交于 2020-12-29 17:17:37
ElasticSearch 入门 本篇为 ElasticSearch 入门学习总结笔记,课程视频地址: ElasticSearch 入门 一、ElasticSearch 简介 1.1、什么是ElasticSearch ​ 简称 ES 基于Apache Lucene 构建的 开源搜索引擎 ,提供一个分布式多用户能力的全文搜索引擎 采用 JAVA 编写的 ,提供简单易用的 RESTFul API (RESTFul web接口),当前流行的企业级搜索引擎 轻松的 横向扩展 ,可支持 PB级 的结构化或非结构化数据处理 可以准实时地快速存储、搜索、分析海量的数据。(用于云计算中,能够达到实时搜索) 1.2、应用场景 海量数据分析引擎(聚合搜索) 站内搜索引擎 数据仓库 1.3、谁在用ES呢? 英国卫报— 实时分析公众对文章的回应 维基百科、GitHub - 站内实时搜索 百度—实时日志监控平台 阿里、Google、小米、京东.... 1.4、环境要求 工具 版本 IDE IDEA或Eclipse JAVA JDK8 Maven 3.x 以上 NodeJS 6.0以上 二、ElasticSearch 安装 2.1、ES版本问题 版本历史 : 1.x-》2.x-》5.x -》最新6.0 版本选择 : 选择6.0进行演练! 2.2、ES安装-单实例 下载地址: ES Downloads

IDEA maven设置配置

耗尽温柔 提交于 2020-12-29 10:38:00
IDEA Maven配置 1. 下载maven 下载地址 从官网上,下载一个压缩包,然后解压到任意的文件夹 Maven的安装必须需要jdk1.7+ 2. 环境变量设置 M2_HOME改为具体的路径,其他的就直接复制就好 M2_HOME=C:\Program Files\Apache Software Foundation\apache-maven-3.2.5 M2=%M2_HOME%\bin MAVEN_OPTS=-Xms256m -Xmx512m Path目录下添加以下 %M2% 打开cmd,输入 mvn --version ,出现以下类似以下结果,则配置成功 Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:29+08:00) Maven home: Q:\maven\apache-maven-3.6.1\bin\.. Java version: 1.8.0_131, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_131\jre Default locale: zh_CN, platform encoding: GBK OS name: "windows 10", version:

201871010116-祁英红《面向对象程序设计(java)》第十周学习总结

陌路散爱 提交于 2020-12-29 07:23:57
博文正文开头格式:(2分) 项目 内容 《面向对象程序设计(java)》 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11778090.html 作业学习目标 1.掌握java异常处理技术; 2.了解断言的用法; 3.了解日志的用途; 4.掌握程序基础调试技巧。 随笔博文正文内容包括: 第一部分:总结第七章关于异常处理相关理论知识(20分) 一、异常 1、异常:程序执行过程中所发生的异常事件,它中断指令的正常执行。 Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置 程序中出现的常见错误和问题有: (1)用户输入错误 (2)设备错误 (3)物理限制 (4)代码错误 2、java把程序运行时可能遇到的错误分为两类: (1)非致命异常:通过某种修正后程序还能继续执行(异常)。如:文件不存在、无效的数组下标、空引用网络断开、打印机脱机、磁盘满等。Java中提供了种独特的异常处理机制处理这类错误 (2)致命异常:程序遇到了非常严重的不正常状态,不能简单恢复执行,是致命性错误。如:内存耗尽系统内部错误等。这种错误程序本身无法解决 3、Java的异常类直接或间接地继承于Throwable类。除内置异常类外,程序员可自定义异常类

注解与反射

跟風遠走 提交于 2020-12-29 02:09:38
一、 注解( annotation) 1、 注解定义 (1) 注解:也叫元数据,标签,注释,注解是给程序看的,而java注释是给程序员看的; 它是 JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 ②JDK内置四大注解: @Override:验证子类是否覆写父类方法成功 @SuppressWarnings:抑制警告(抑制那条黄色的线) @Deprecated 申明 类或者方法。。。已经过期 @SafeVarargs:抑制警告(java7之后,它专门提供了此注解来抑制使用可变参数和泛型方法带来的警告) ③ 自定义注解(需要使用元注解) 什么叫做元注解: 简单理解,就是贴在注解上的注解 四大元注解: 1. @Target 申明该注解最终能贴的位置 2. @Retention 表示注解的生命周期 RESOURCE注解只存在于源文件时期; CLASS注解只存在于源文件和字节码时期 RUNTIME注解存在于源文件、字节码和运行时期 3. @Documented 使用 @Documented定义后的注解,在该注解使用后,如果导出API文档,会有该注解的基本信息 4. @Inherited 如果该注解是定义在父类上面的,子类也是能被继承到的 ③、语法格式 元注解 public

面试官问我:什么是静态代理?什么是动态代理?注解、反射你会吗?

半城伤御伤魂 提交于 2020-12-29 00:51:39
听说微信搜索《Java鱼仔》会变更强哦! 本文收录于 JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 开场 一位穿着蓝色衬衫,牛仔裤,拿着一个白色保温杯的中年男子急匆匆地坐在你对面,看样子是项目上的东西很急,估摸面试时间不会太长,这样一想心情放松了许多......(后来我就被打脸了) ​ 面试开始 面试官:小伙子,我看你的简历上说精通java基础对吧,那我先简单来问几个java基础。 好的好的,面试官你问。(一听到简单两个字就内心窃喜......) 面试官:你知道Java中有个东西叫代理吗? 知道知道,代理就是 通过代理对象去访问实际的目标对象 ,比如我们在生活中租房,可以直接找房东,也可以通过某些租房平台去租房,通过租房平台的这种方式就是代理。在java中这种租房平台就被叫做代理类,代理类不仅能实现目标对象,还能增加一些额外的功能。据我所知java中的代理方式有静态代理和动态代理。(这个时候面试官很大概率会问你这两种代理模式)。 面试官:没想到你还能通过生活中的现象去理解代码,不错不错,我看你提到了静态代理和动态代理,那你给我说说什么是静态代理吧 (果然问了,还好我做了准备)静态代理就是在代码运行之前,这个代理类就已经存在了。还是以上面的租房为例,在代码中会首先创建一个通用的租房接口: public interface Room { void