Java
文章平均质量分 70
Anything about Java
HanhahnaH
此人不懒,依然什么都没有写
展开
-
正确的姿势完成Http请求
这是因为在URL中,空格和某些其他字符(如#,%等)是需要进行编码的。空格通常被编码为%20或者+原创 2023-12-19 16:06:08 · 433 阅读 · 0 评论 -
Java中使用Thrift
需要注意的是,transport 客户端要和服务端对应,比如如果要对 NIO 模型的服务端进行调研,transport 就必须使用 TFramedTransport或TFastFramedTransport。业务代码中只需要注入 SimpleService.Iface,并直接调用接口方法,而完全不需要关注内部逻辑实现。通过 thrift compiler 生成 java 代码。client端可以直接调用接口,二不用关心具体的实现类。之后将相应的 Iface 注册到 IOC 容器中即可。原创 2023-07-19 15:01:39 · 1470 阅读 · 0 评论 -
O/R Mapping 对象关系映射
ORM(Object-Relational Mapping)是一种将对象模型和关系型数据库之间的映射关系进行自动化转换的技术。ORM 的目标是将对象模型和关系型数据库之间的转换过程自动化,使开发人员可以使用面向对象的方式来操作数据库,从而提高开发效率和代码质量。对象和关系之间的映射关系定义。数据库操作的自动化,包括 CRUD 操作、事务管理等。原创 2023-07-17 20:31:04 · 305 阅读 · 0 评论 -
Java虚拟机(JVM)
类模板对象,其实就是 Java 类在 JVM 内存中的一个快照,JVM 将从字节码文件中解析出的常量池、类字段、类方法等信息存储到模板中,这样 JVM 在运行期便能通过类模板而获取 Java 类中的任意信息,能够对 Java 类的成员变量进行遍历,也能进行 Java 方法的调用。初始化(Initialization):在初始化阶段,JVM会执行类的初始化代码,包括静态变量的赋值和静态代码块的执行。类的初始化是在首次使用该类时进行的,它确保类的静态资源被正确初始化,并且只会执行一次。原创 2023-07-12 15:04:34 · 269 阅读 · 0 评论 -
解释执行和编译执行
C, C++, Java(Java是一种特殊的编译执行语言,它将源代码编译为字节码文件,然后在Java虚拟机上解释执行字节码)原创 2023-07-10 18:59:42 · 541 阅读 · 0 评论 -
Java静态与非静态
总结来说,静态成员在类加载时就会被初始化,并且可以在整个程序的生命周期内使用,而非静态成员需要在类的实例创建后才能使用。原创 2023-07-10 16:13:54 · 186 阅读 · 0 评论 -
Java Spring多线程
对于 Future.get()方法返回的结果,一个重要的事情是,只有提交的任务实现了java.util.concurrent.Callable接口时才返回 Future。如果所有的线程都在忙于执行任务并且又有新的任务到来了,这个线程池将创建一个新的线程并将其提交到 Executor。此方法用于取消已提交任务的执行。如果任务完成,结果将立即返回给调用者,否则调用者将被阻塞,直到 Executor 完成此操作的执行并计算出结果。但是,如果管理得不合理,或者任务不是很短的,则线程池将包含大量的活动线程。原创 2023-06-30 11:05:58 · 1099 阅读 · 0 评论 -
Aviator-Java轻量级高性能Java表达式求值
在上述代码中,首先定义表达式字符串,然后使用AviatorEvaluator的compile()方法编译表达式,将表达式编译成可执行的对象。接着,准备参数并执行表达式,最后输出结果。AviatorScript 文档 https://www.yuque.com/boyan-avfmj/aviatorscript/ashevw。Aviator是一款Java语言编写的轻量级高性能Java表达式求值库,支持java基本类型、字符串、日期、集合、数组等类型的表达式求值运算。原创 2023-04-27 11:23:04 · 355 阅读 · 0 评论 -
Spring中的设计模式及使用示例
设计模式是指在面向对象软件设计中常见的解决特定问题的方法。设计模式不是一段可复制粘贴的代码,而是一种通用解决方案,可以帮助开发者更好地组织代码、提高代码的可复用性、扩展性和可维护性。常见的设计模式包括单例模式、工厂模式、命令模式、观察者模式、责任链模式等等。每个设计模式都有其内部机制,其核心思想在于相似的问题有相似的解法,将这些解法规则化后,通过加以应用和变通,就可以避免重复的代码和架构设计。原创 2023-04-26 21:43:45 · 891 阅读 · 0 评论 -
Java Spring 堆内存(heap)和栈内存(stack)
Spring 容器中的对象实例通常都是单例模式(Singleton)的,也就是说只会创建一个对象实例并共享,因此在多处引用该对象时都使用同一个对象实例,从而减少内存的使用。栈内存中的数据的生命周期与方法调用的生命周期是一致的,当一个方法被调用时,该方法中的所有局部变量和方法参数都会存储在栈内存中,当方法执行完毕后,内存将会自动释放这些栈内存中的数据。堆内存中的数据生命周期与对象的生命周期是一致的。当一个对象被创建时,它会存储在堆内存中,当它不再被引用时,它会被垃圾回收器回收,内存空间会被自动释放。原创 2020-09-03 07:58:56 · 267 阅读 · 0 评论 -
抽象同步队列AbstractQueuedSynchronizer(AQS)简要理解
AQS(AbstractQueuedSynchronizer)是 Java 中实现锁和同步器的基础设施,它是一个抽象类,提供了构建锁和同步器的基本框架,可以用于实现 ReentrantLock、Semaphore、CountDownLatch 等同步器。A Q S定义了一套多线程访问共享资源的同步模板,解决了实现同步器时涉及的大量细节问题,能够极大地减少实现工作。原创 2023-04-19 16:13:05 · 690 阅读 · 0 评论 -
Java基本类型和包装类型int和Integer
该错误提示表明你在处理一个Optional类型的参数时,传入的参数中包含一个名为hasRef的int类型参数,但是无法将它转换为一个null值,因为该参数被声明为基本数据类型int。基本数据类型是无法赋值为null的,因此将一个Optional的参数传递给一个接收int类型参数的方法,如果传递的参数值为null或者Optional未被设置值,则会导致此类型的错误。总结来说,基本类型用于表示普通的数据类型,快速处理数字。在这种情况下,可以使用Optional类型的参数来代替Optional类型的参数。原创 2023-04-17 17:26:54 · 341 阅读 · 0 评论 -
Java和Spring常用注解
在Spring框架中,@Component和@Service都是用来将一个Java类标记为Spring容器中的一个组件。不过,在实际开发中,@Service通常用于标记业务层的Bean,而@Component则更为通用,可以用于标记任意层的Bean。具体而言,@Component表示通用的组件,可以用在任何层次。它是一个比较抽象的概念,可以用于标记任何需要被Spring容器管理的组件类。而@Service则表示服务层组件,用于标记服务层(业务层)的Bean。原创 2023-04-13 11:50:14 · 700 阅读 · 0 评论 -
Java的语言特性
机器码(Machine Code)是计算机能够直接执行的最底层的指令集合,它表示计算机硬件上具体的操作。例如,将两个数相加,将一个值存储到内存中等操作。机器码由二进制代码组成,被计算机硬件直接识别并执行。机器码通常是由计算机的汇编器生成的,汇编器会将汇编语言程序翻译成机器码。机器码是计算机最底层的指令,直接由计算机的硬件进行执行,因此它具有高效、快速的特点。虽然机器码非常有效,但是它很难进行人工编写和阅读。因此,程序员通常使用高级编程语言编写程序,并使用编译器将高级语言编译成机器码。原创 2023-04-13 11:24:22 · 436 阅读 · 0 评论 -
Java数据结构实现及效率
移除set元素,调用remove方法,底层实际上是调用HashMap的remove方法删除指定Entry,时间复杂度是O(1),因此效率高。添加set元素,调用add方法,底层实际上是调用HashMap的put()方法添加key-value对,时间复杂度O(1),因此效率高。获取set元素,需要调用iterator方法,返回的元素无序,因此需要遍历集合,时间复杂度O(N),效率低下。TreeMapget操作的时间复杂度是O(log(n))的,相比于HashMap的O(1)还是差不少的。原创 2023-03-20 16:04:59 · 356 阅读 · 0 评论 -
Java开发异常记录
Java开发中遇到的异常原创 2022-10-25 16:29:25 · 221 阅读 · 0 评论 -
Java数据结构-HashMap
Java HashMap原创 2022-09-09 11:44:34 · 372 阅读 · 0 评论 -
Java注解汇总
Java注解汇总@Results @Param@Results @Param在使用mybatis注解开发的时候,数据库返回的结果集和实体类字段不对应,我们就需要手动指定映射关系. 通过注解@Results来指定对应关系id: 当前results结果集声明的唯一标识value: 结果集的映射关系column: 指定数据库字段的名称property: 指定实体类属性的名称dbcType: 数据库字段类型@Select({"select id, name, class_id from my_stu原创 2021-09-17 19:15:20 · 106 阅读 · 0 评论 -
Java并发
Java并发volatile关键字内存模型并发三问题: 原子性, 可见性, 有序性原子性问题可见性问题有序性问题volatile关键字内存模型https://www.cnblogs.com/dolphin0520/p/3920373.html当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中。在多核CPU中,每条线程可能运行于不同的CPU中,因此每个线程原创 2021-09-16 20:18:52 · 87 阅读 · 0 评论 -
面向对象七大原则 OOP
面向对象 OOP面向对象七大原则单一职责原则开闭原则里氏替换原则依赖倒置原则接口隔离原则迪米特原则组合聚合复用原则面向对象七大原则https://www.cnblogs.com/gongliying/p/11028674.html单一职责原则一个类只负责一个领域的内容,简而言之就是自己的类负责自己的事情,与别的类互不干涉开闭原则对修改关闭,对扩展开放里氏替换原则父类能出现的地方,可以用子类代替,子类拥有父类的所有属性和方法. 通俗来说子类拥有父类的功能,可以拓展父类的功能,但是不能修改父原创 2021-09-08 16:09:57 · 93 阅读 · 0 评论 -
Java CompletableFuture异步编程
Java CompletableFuture从Future到CompletableFuture从Future到CompletableFutureJava的Future机制详解常见的两种创建线程的方式。一种是直接继承Thread,另外一种就是实现Runnable接口。这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果Future模式的核心思想是能够让主线程将原来需要同步等待的这段时间用来做其他的事情。(因为可以异步获得执行结果,所以不用一直同步等待去获得执行结果)B图表达的是使用Futu原创 2021-08-25 11:36:42 · 236 阅读 · 0 评论 -
Java基础知识汇总
Java基础知识汇总Java数据类型Java数据结构枚举(Enumeration)位集合(BitSet)向量(Vector)栈(Stack)字典(Dictionary)哈希表(Hashtable)属性(Properties)Java数据类型基本数据类型Java数据结构枚举(Enumeration)位集合(BitSet)向量(Vector)栈(Stack)字典(Dictionary)哈希表(Hashtable)属性(Properties)...原创 2021-08-05 21:19:44 · 143 阅读 · 0 评论 -
Java函数式编程
Java函数式编程函数式编程函数式接口函数式编程https://www.jianshu.com/p/043858687a55函数内部涉及的变量都是局部变量,不会像面向对象编程那样,共享类成员变量,也不会像面向过程编程那样,共享全局变量。函数的执行结果只与入参有关,跟其他任何外部变量无关。同样的入参,不管怎么执行,得到的结果都是一样的。Java为函数式编程引入了三个新的语法概念:Stream类、Lambda表达式和函数接口(Functional Inteface)Stream类用来支持通过“.”级原创 2021-07-21 17:06:42 · 226 阅读 · 0 评论 -
Java不那么基础的知识
Java日常学习积累函数式接口函数式接口函数式接口:这个借口有且仅有一个方法public class Main { public static void main(String[] argv) { // 为函数式接口实例赋值一个lambda表达式 Processor stringProcessor = (String str) -> str.length(); String name = "Java Lambda"; int length = stringProc原创 2021-07-19 17:48:26 · 197 阅读 · 0 评论 -
Java面试知识点汇总
Java面试知识点汇总Java变量staticJava面向对象override / overload继承extends & implement接口ServletJava变量Java变量包括:局部变量和成员变量局部变量:在方法体内声明,只能在方法体中访问,方法结束内存释放成员变量:实例变量和静态变量(成员变量使用了static关键字)static静态变量又称为类变量,也就是说这个变量属于类的,与类的实例无关。类所有的实例都共享静态变量,可以直接通过类名来访问它。静态变量在内存中只存原创 2021-03-30 07:55:18 · 135 阅读 · 0 评论