- 博客(29)
- 收藏
- 关注
原创 Java - 在Linux系统上使用OpenCV和Tesseract
7、执行命令:make,开始编译,经过较长时间的等待,如果进度到100%且没有报错,则编译完成;此时build目录下生成了一系列文件,其中lib目录中,就有我们需要的libopencv_java249.so文件,此外bin目录中,还生成了opencv-249.jar这个jar包文件。2)CMAKE_INSTALL_PREFIX=/usr/local/app/install,指定了opencv的安装目录(install也是自己新建的),如果只是为了编译得到.so文件,此参数可以不写;
2024-04-26 10:53:08 1257 7
原创 java基础 - HashMap
既然输入是无限的,而我们使用的特征空间是有限的,那么不管使用的hash算法多么复杂和精妙,都有可能出现不同的输入信息计算出的特征是相同的,这就是hash碰撞,也叫hash冲突。由put方法的流程可知,调用resize方法扩容出现在首次put,以及put后元素个数大于扩容阈值时,扩容的核心操作是创建一个更大的数组(HashMap采用2倍扩容),然后把原来的元素放到新数组中正确的位置上。这些Node结点在数组中的位置,是通过对k-v中的key进行hash运算,根据计算出的值来确定的,所以叫做HashMap。
2023-06-03 23:40:30 1203
原创 Java基础 - JDBC操作数据库(MySql)
JDBC是Java语言操作数据库的一套接口,也就是规范,具体的实现需要各个数据库厂商去实现。比如我们在使用JDBC去连接mySql数据库的时候,我们必须要依赖一个叫做mysql-connector-java的jar包,这里面封装的就是mySql对于JDBC的实现。
2023-05-23 10:41:08 5825
原创 java基础 - ReentrantLock
从结构上来看,AQS中有两个内部类,一个是Node结点类,一个是ConditionObject条件对象类,前者用来实现队列,后者用来做线程间通信。
2023-05-23 10:40:40 2798
原创 java基础 - ReentrantReadWriteLock
ReentrantReadWriteLock,可重入的读写锁,一个ReentrantReadWriteLock对象中,包含一个Sync同步器对象、一个ReadLock读锁对象 以及一个WriteLock写锁对象。Sync、ReadLock、WriteLock都是ReentrantReadWriteLock的内部类,其中Sync继承自AbstractQueuedSynchronizer,所以ReentrantReadWriteLock也是基于AQS框架的实现。
2023-05-23 10:40:18 339
原创 java基础 - ThreadLocal
ThreadLocal是一个泛型类,作用是实现线程隔离,ThreadLocal类型的变量,在每个线程中都会对应一个具体对象,对象类型需要在声明ThreadLocal变量时指定。
2023-05-23 10:40:02 239
原创 java基础 - 多线程实现
同时它内部有一个Callable类型的成员变量可以通过构造函数进行赋值,线程运行时调用的run方法内部又调用了该Callable成员的call方法,而call方法正是我们可以自己实现的。Producer类实现了Callable接口,重写了带返回值的call方法,但是Thread类的构造函数不接受Callable类型的参数,所以这里用到FutureTask这个泛型类进行串联。3、实现Callable接口,重写call方法,然后结合FutureTask类创建线程。2、实现Runnable接口,重写run方法。
2023-05-23 10:39:07 94
原创 java基础 - 线程池
线程池需要用到java的线程池类ThreadPoolExecutor,通常使用它的构造方法来创建线程池。:核心线程数,即线程池中保持存活的最少线程数。核心线程即使空闲,也会一直存活,除非手动设置参数 allowCoreThreadTimeOut 为true,才能使空闲的核心线程在超过存活时间阈值后被销毁。:线程池中允许存在的最大线程数。:空闲线程的存活时间。默认情况下,核心线程数一直保持存活,此参数只影响针对超出核心数的那部分线程;
2023-05-23 10:38:45 89
原创 java基础 - 设计模式 - 单例模式
饿汉式、双检锁式、静态内部类、枚举类型都是可用的单例模式实现方案,可以根据需求不同进行选择,当然最推荐的还是枚举方式的实现,不仅实现简单,而且天然免疫反射、反序列化、clone()等任何形式的破坏,非常安全。
2023-05-23 10:37:02 54
原创 spring boot基础 - Mybatis的Mapper实例化原理
我们在使用Mybatis的时候,通常会在Mapper接口上添加@Mapper注解,或者为了方便而使用@MapperScan注解。接下来分别看看这两种注解是如何实现相关mapper的bean注册的。
2023-04-09 16:59:12 1922
原创 spring基础 - AOP
AOP,面向切面编程,通常用来封装与具体业务无关,却用被各业务模块统一调用的逻辑,比如日志管理、权限校验、事务管理等。spring AOP基于动态代理,对类的方法进行增强。
2023-04-09 16:58:50 183
原创 Java基础-JDK动态代理
JDK的中实现动态代理,需要用到java反射包中Proxy类,和InvocationHandler接口使用Proxy创建的代理,本质上是面向接口的代理,是对接口的实现。我们通常说的为目标对象创建一个代理对象,前提就是需要目标对象实现接口,对目标对象的方法增强,本质上是代理对象对接口中对应方法的实现。
2023-04-09 16:58:20 1186
原创 Spring boot启动流程-bean的实例化和初始化
AbstractApplicationContext类的refresh方法中,调用了finishBeanFactoryInitialization(beanFactory)方法,完成了bean factory的初始化,其中就包括bean的实例化和初始化。
2023-04-09 16:57:15 1579
原创 Spring boot启动流程-解决循环依赖
这里可能还看不出来什么头绪,继续往下走,在bean A初始化的时候,会自动装配依赖的bean B、C等,而在B、C初始化时又会自动装配它们所依赖的A(当然B、C在实例化之后也会和A一样先缓存起来),但这个时候A也正在创建中,最终的对象肯定是拿不到的,这时候就考虑生成一个A的早期引用,先提供给B、C。然后B、C就能够完成初始化,最终A也能完成初始化。最后要注意的是,spring解决循环依赖的方式是在bean的实例化完成之后,所以不要在构造方法中引入循环依赖,因为这时对象还没有实例化,spring也无法解决。
2023-04-09 16:56:57 8461
原创 Java基础-Cglib动态代理
摘自OSCHINA(开源中国)的介绍:CGLib (Code Generation Library) 是一个强大的、高性能、高质量的 Code 生成类库。它可以在运行期扩展 Java 类与实现 Java 接口。Hibernate 用它来实现 PO 字节码的动态生成。CGLib 比 Java 的 java.lang.reflect.Proxy 类更强的在于它不仅可以接管接口类的方法,还可以接管普通类的方法。CGLib 的底层是 Java 字节码操作框架 —— ASM。
2023-04-09 16:55:16 1455
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人