
JAVA
文章平均质量分 61
JAVA
爱为斯坦
这个作者很懒,什么都没留下…
展开
-
jdk动态代理与cglib动态代理:
最近在用java实现redis,在使用动态代理时遇到了一点问题,即使用jdk动态代理(Invocationhandler)时,如果代理对象是一个接口的实现类,那么此时动态代理获取到的method对象是接口中的,而不是实现类的,现象是:我在实现类中对接口方法上新增了注解,但是此刻method反射获取不到注解信息,于是大概整理了一下这两者的区别:获取的是接口中的方法信息,因此如果注解是在实现类上定义的,通过代理对象获取不到这些注解。:获取的是目标类中的方法信息,因此可以获取到实现类上的注解。原创 2024-07-11 17:28:51 · 346 阅读 · 0 评论 -
java中的值传递和引用传递理解
它们是引用传递,但由于它们是不可变的(immutable),一旦创建后值不会改变。原创 2024-06-28 15:32:23 · 425 阅读 · 0 评论 -
对代理模式和动态代理以及AOP的一些理解
代理模式和动态代理各有优劣,具体使用时需要根据需求选择合适的方式。静态代理适用于结构较为简单且明确的场景,而动态代理则适用于需要灵活扩展和动态处理的复杂场景。原创 2024-06-27 12:17:22 · 597 阅读 · 0 评论 -
对泛型的一些总结理解
泛型(Generic)是Java编程语言的一项特性,允许类、接口和方法在定义时使用类型参数,从而可以在不确定具体类型的情况下编写代码。泛型的主要目的是提高代码的重用性和类型安全性。原创 2024-06-26 16:44:07 · 430 阅读 · 0 评论 -
【根据消息类型实现订阅发布模型】
基于消息类型的订阅发布者模型原创 2024-04-22 20:32:53 · 376 阅读 · 2 评论 -
JAVA—Jdbc学习
使用Jdbc连接数据库//1:加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2:用户信息和url String url="jdbc:mysql://localhost:3306/jpa?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=true"; //对于mysql8版本,serve原创 2021-05-19 23:07:23 · 133 阅读 · 0 评论 -
Jackson和fastjson将Java对象转成JSON 与乱码解决
Jackson代码public String json1() throws JsonProcessingException { //创建一个jackson的对象映射器,用来解析数据 ObjectMapper mapper = new ObjectMapper(); //创建一个对象 User user = new User("秦疆1号", 3, "男"); //将我们的对象解析成为json格式 String str = m原创 2020-06-04 23:37:13 · 3303 阅读 · 0 评论 -
二叉树——哈夫曼树(妙!)
1) 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。2) 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为 1,则从根结点到第 L 层结点的路径长度为 L-1结点的权及带权路径长度:若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结原创 2020-06-01 22:45:59 · 544 阅读 · 0 评论 -
堆排序!!!!!!!!!
堆排序堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆大顶堆举例说明5)小顶堆举例说明:6)一般升序采用大顶堆,降序采用小顶堆排序的基本思想堆排序的基本思想是:将待排序序列构原创 2020-06-01 00:18:38 · 247 阅读 · 0 评论 -
前序线索化二叉树
前序化二叉树的方法其实这里的重点就是设置一个变量来记录当前节点的上一个节点,然后再进行处理,重中之重就是画图!!!还有就是要明白递归是什么,递归式回溯!!!在上一篇文章中已经讲过线索化二叉树和中序线索化二叉树的方法现在在这里再讲一下前序线索化二叉树以及遍历前序线索化二叉树的方法/** * 前序线索化二叉树 * @param node */ void preThreadOrder(HeroNode node) { if(node == null)原创 2020-05-31 13:28:44 · 1282 阅读 · 6 评论 -
JAVA线程高级用法
Lock锁的用法之前了解了Java中进程锁的关键字synchronized 的用法今天还有一种方法可以实现进程锁——Lockjava.util.concurrent.locks包下常用的类与接口(lock是jdk 1.5后新增的)Lock锁可以手动加锁解锁,这部分就相当于synchronized括起来的代码段部分package gaoji;import java.util.concurrent.locks.ReentrantLock;/** * 测试lock锁 */public原创 2020-05-30 14:27:27 · 416 阅读 · 0 评论 -
线索化二叉树的概念与实现
n 个结点的二叉链表中含有 n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种一个结点的前一个结点,称为前驱结点一个结点的后一个结点,称为后继结点说明: 当线索化二叉树后,...原创 2020-05-30 13:18:24 · 293 阅读 · 0 评论 -
顺序存储二叉树
package tree;public class ArrBinaryTreeDemo { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6, 7}; //创建一个arrBinaryTree ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr); arrBinaryTree.perO...转载 2020-05-29 19:05:06 · 218 阅读 · 0 评论 -
JAVA中的二叉树(数据结构)
二叉树的遍历代码实现package tree;/** * 二叉树 * 前序中序后序遍历实现 */public class BinaryTreeDemo { public static void main(String[] args) { //先需要创建一颗二叉树 BinaryTree binaryTree = new BinaryTree(); //创建需要的节点 HeroNode heroNode1 = ...原创 2020-05-28 23:00:07 · 3033 阅读 · 1 评论 -
哈希表的JAVA实现(HashTable)
Google面试问题描述有一个公司, 当有新员工报道的时候, 要求将该员工的信息保存(id, 姓名, 年龄, 住址等), 当输入该员工的的id时, 要求查找该员工的所有信息。注: 不要使用数据库, 尽量节省内存, 速度越快越好思路分析不让使用数据库, 越快越好, 我们选择哈希表使用链表来实现哈希表, 该链表不带表头, 即链表的第一个结点就存放雇员信息什么是哈希表?1.哈希表是通过关键码key来直接进行访问的一种数据结构2.也就是它通过关键码来值映射到表中的一个位置来访问记录,进而加快访问的速原创 2020-05-28 13:22:10 · 627 阅读 · 0 评论 -
插值查找算法(二分查找升级版)
本质上和二分查找一样,但在原基础上进行了公式的优化,使它对于排列较为均匀的数列效率更高!/** * 插值查询 */public class InsertSerach { public static void main(String[] args) { int[] arr=new int[100]; for (int i = 0; i < 100; i++) { arr[i]=i; } int i..原创 2020-05-27 10:13:53 · 174 阅读 · 0 评论 -
二分查找算法(有序数组)
只适用于有序数组哦!!!二分查找,顾名思义就是将数组对半分开进行查找package search;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 二分查找法 * 数组必须有序 */public class BinarySeatch { public static void main(String[] args) { int[] arr = {1,1,原创 2020-05-26 23:16:11 · 1001 阅读 · 0 评论 -
进程的不安全问题与解决方案
不安全的买票sleep会放大问题的发生性噢!package syn;/** * 不安全的买票 */public class UnsafeBuyTicket { public static void main(String[] args) { BuyTicket buyTicket = new BuyTicket(); new Thread(buyTicket,"你").start(); new Thread(buyTicket,"我"原创 2020-05-26 15:16:23 · 1068 阅读 · 1 评论 -
线程的状态与转换
开始状态(new)就绪状态(runnable)运行状态(running)阻塞状态(blocked)结束状态(dead)初始状态实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了初始状态可运行状态可运行状态只是说你资格运行,调度程序没有挑选到你,你就永远是可运行状态。调用线程的start()方法,此线程进入可运行状态。当前线程sleep()方法结束,其他线程join()结束,等待用户输入完毕,某个线程拿到对象锁,这些线程也将进入可运行状态。当.原创 2020-05-26 14:47:46 · 190 阅读 · 0 评论 -
多线程模拟龟兔赛跑
package demo01;/** * 模拟龟兔赛跑 */public class Race implements Runnable { //胜利者 private static String winner; public void run() { for (int i = 0; i <= 100; i++) { //模拟兔子休息 if(Thread.currentThread().getName原创 2020-05-26 00:40:30 · 152 阅读 · 0 评论 -
JAVA线程的三种创建方式
继承Thread类package demo01;public class Thread1 extends Thread{ public void run(){ for (int i = 0; i < 20; i++) { System.out.println(i); } } public static void main(String[] args) { //main线程,主线程原创 2020-05-25 22:54:31 · 167 阅读 · 0 评论 -
动态规划算法(dynamic planning)
求数组中是否存在某几个数相加等于s?这里我使用的是Java实现:使用递归实现public class Test1 { public static void main(String[] args) { int[] arr={3,34,4,12,5,2,0}; System.out.println(dp_subset(arr,9)); S...原创 2020-04-12 11:41:36 · 604 阅读 · 0 评论 -
JAVA中Lambda表达式的使用(jdk8)
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。package demo02.lambdademo03;/** * lambda表达式的使用 */public class Lambdatest01 { //静态内部类 static class Love implements ILove { public原创 2020-05-24 17:03:25 · 1617 阅读 · 0 评论 -
数组模拟链表解决约瑟夫问题
数组模拟链表解决约瑟夫问题package linkedlist;public class Josepfu { public static void main(String[] args) { CircleSingleLinkedList list=new CircleSingleLinkedList(); list.addBoy(20); list.countBoy(1,19,20); } //创建一个环形的单项链表}cla原创 2020-05-10 20:58:08 · 232 阅读 · 0 评论 -
数组模拟栈实现计算器功能(加减乘除)
数组模拟栈实现计算器功能(加减乘除)package stack;public class Calculator { public static void main(String[] args) { //根据思路实现表达式的运算 String expression="30+3*2-6+6/2+356*2"; //创建两个栈 ArrayStack2 numstack=new ArrayStack2(10); Array原创 2020-05-10 20:55:43 · 466 阅读 · 0 评论 -
java反射机制(超细节)
java反射机制:反射:框架设计的灵魂框架:半成品软件。可以在框架的基础上进行软件开发,简化编码反射:将类的各个组成部分封装为其他对象,这就是反射机制好处:1. 可以在程序运行过程中,操作这些对象。2. 可以解耦,提高程序的可扩展性。获取Class对象的方式:1. Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象* 多用于配置文件,将类名定...原创 2020-04-06 23:54:25 · 147 阅读 · 0 评论