自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(438)
  • 资源 (33)
  • 问答 (7)
  • 收藏
  • 关注

原创 spring配置双数据源

配置好了数据源之后,需要进行定义动态数据源,继承AbstractRoutingDataSource,AbstractRoutingDataSource是基于特定的查找key路由到特定的数据源。配置是都搞定了,那怎么切换呢,可以看到在动态数据源中其实是根据key来进行路由获取数据源的,其实就是怎么改变这个key,而且是动态改变,就用spring aop来进行解决吧。前段时间有个需求,需要将数据存到两个数据库中,一个库中存放主信息,一个库中存放特殊信息,看来是要使用双数据源了,搞起来吧。

2024-04-27 10:40:28 68

原创 spring自定义属性编辑器

属性编辑器用来解析bean的配置文件中的属性标签,spring的BeanWrapperImpl默认会注册CustomCollectionEditor(集合)、CustomMapEditor(Map)、CurrencyEditor(货币)、ByteArrayPropertyEditor等,可以使用。实现了BeanFactoryPostProcessor接口,由spring容器自动检测并执行。方法,负责向spring容器注册属性编辑器。实现类作为bean进行注册。这个bean,并写入属性。

2024-04-26 11:14:01 333

原创 spring引入外部属性文件

这样配置当然也可以,只是要去修改spring配置文件的时候由于spring的配置文件内容太多,不太方便,所以有时候会引入外部的属性文件。有时候我们并不想把所有的配置信息都放到spring的配置文件中,这样的话也不太好维护,比如说数据库的信息。会生成一个PropertySourcesPlaceholderConfigurer类来解析占位符。db.properties属性文件。spring引入外部属性文件。

2024-04-25 14:16:14 153

原创 spring的扩展接口

它扩展自BeanFactoryPostProcessor,在执行BeanFactoryPostProcessor的功能前,提供了可以添加bean definition的能力,允许在初始化一般bean前,注册额外的bean。例如可以在这里根据bean的scope创建一个新的代理bean。如果对象实例实现了BeanFactoryAware接口,BeanFactory容器会将自身通过调用setBeanFactory方法传递给该对象实例,使得该对象实例拥有了BeanFactory的实例引用,

2024-04-24 21:31:06 946

原创 spring bean的作用域

https://zhhll.icu/2021/框架/spring/基础/13.spring bean的作用域/](https://zhhll.icu/2021/框架/spring/基础/13.spring bean的作用域/)singleton单例:这种 bean 范围是默认的,确保不管接受到多少个请求,每个容器中只有一个 该bean 的实例,单例的模式由 bean factory 自身来维护,在加载spring配置文件时就会创建对象。spring bean的作用域。

2024-04-23 10:16:45 195

原创 spring事务失效场景

Spring在扫描Bean的时候会自动为标注了@Transactional注解的类生成一个代理类(proxy),当有注解的方法被调用的时候,实际上是代理类调用的,代理类在调用之前会开启事务,执行事务的操作,但是同类中的方法互相调用,相当于this.B(),此时的B方法并非是代理类调用,而是直接通过原有的Bean直接调用,所以注解会失效。首先spring的事务是使用AOP来实现的,而AOP的底层是代理(JDK代理或者CGLIB代理),所以事务失效就想什么时候不能进行代理。类,去掉与此次无关的代码。

2024-04-22 10:14:38 380

原创 spring注解整理

Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型,如果使用name属性,则使用byName的自动注入策略;适用于bean属性setter方法,并表示受影响的bean属性必须在XML配置文件在配置时进行填充。使用@Bean来标注方法以此来进行bean的实例化,bean的类型是返回类型,bean的id默认是方法名称,可以使用@Bean注解来自定义bean的id以及初始化方法、销毁方法。

2024-04-21 15:20:05 1030

原创 web应用使用spring

对于java而言,使用最多的还是web开发,如何在web应用中使用spring呢,web应用中没有main方法,而且必须在servlet容器加载时就创建spring的IOC容器,之前在学习Servlet的时候有讲到一个Servlet监听器,可以监听ServletContext、HttpSession、ServletRequest等对象的创建和销毁。所以可以实现ServletContextListener接口,重写contextInitialized方法来实现spring的IOC容器的创建。

2024-04-20 10:51:46 418

原创 spring事件监听

可以实现ApplicationListener来自定义事件,如果一个 bean 实现了 ApplicationListener 接口,当一个 ApplicationEvent 被发布以后,bean 会自动被通知。当容器调用 ConfigurableApplicationContext的close()方法关闭ApplicationContext时触发该事件。当容器调用ConfigurableApplicationContext的 Start()方法开始/重新开始容器时触发该事件。spring中定义的事件。

2024-04-18 10:08:30 499

原创 spring事务处理

REPEATABLE_READ(可重复读) 确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读,但幻读仍存在(Mysql默认的事务隔离级别)SERIALIZABLE(串行化) 确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作,所有并发问题都可以避免,但是性能低下。PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行,被嵌套的事务可从当前事务中单独地提交或回滚;

2024-04-17 09:51:57 695

原创 Spring AOP详解

Spring AOP中使用的是动态代理。AOP的核心是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组API提供横切的功能,在SpringAOP中,切面通过@Aspect注解,也可以使用XML配置。动态代理不会去修改字节码,而是在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。after 后置通知AfterAdvice,在方法执行之后调用,无论方法执行是否成功,所以后置通知无法获取到返回结果@After。

2024-04-16 10:11:35 248

原创 spring依赖注入

在《spring揭秘》中提到接口注入,实现某个接口,该接口中会声明一个方法,该方法的参数就是所依赖的对象类型,当然这种方式过于繁琐,早就被淘汰了,毕竟是spring2.5。Spring IOC本质是创建类实例的工厂,并且对类实例进行管理,负责创建对象,管理对象,装配对象,配置对象,并且管理这些对象的整个生命周期。但是我们真正只是需要调用该依赖对象做某些事情,只要在用的时候,该对象是可以调用的就可以,该对象是主动获取还是别人送过来并没有太大的区别。在没有依赖注入之前,我们想要什么都需要自己主动地去获取。

2024-04-15 09:56:23 351

原创 bean的生命周期

Bean后置处理器是一种特殊的Bean,这种特殊的Bean并不对外服务,主要负责对容器中的其他Bean执行后处理,例如容器中的目标Bean生成代理等。spring bean factory负责管理在spring容器中被创建的bean的生命周期,有两组回调(初始化之后调用的回调和销毁之前调用的回调),框架内提供了四种方式来管理bean的生命周期事件。如果bean实现InitializingBean接口,调用InitializingBean的afterPropertiesSet()方法,

2024-04-14 12:07:53 1208

原创 spring bean的继承和依赖

既然spring提供了继承,那么也就存在了专门用于被继承的bean,而不进行实例化,这种bean被称为抽象bean,使用abstract="true"表明这是一个抽象bean。有时候需要保证bean实例化的先后顺序,在创建一个bean的时候必须保证另外一个bean也被创建,如果另一个bean不存在,则无法正常实例化该bean。spring除了提供了一般的配置bean的方式之外,还实现了java中继承的特性,设置bean的父子关系,这样对于一些重复的配置就可以进行省略。bean的继承和依赖。

2024-04-13 14:26:24 444

原创 spring配置bean

使用静态工厂方法创建bean实例时,class属性也必须指定,此时的class属性并不是指定Bean实例的实现类,而是静态工厂类,Spring通过该属性知道由哪个工厂类来创建Bean实例,还可以使用factory-method属性来指定静态工厂方法,Spring将调用静态工厂方法返回一个Bean实例,静态工厂方法需要参数的话,使用。@Resource注解可以根据类型注入,也可以根据名称注入,若使用的byName,需要提供bean的名称,如果不提供该bean的名称,则自动使用属性的名称进行匹配。

2024-04-12 10:20:14 769

原创 spring容器

BeanFactory可以认为是bean集合的工厂类,包含了各种bean的定义,以便在接收到客户端请求时将对应的bean实例化,是spring最底层的接口,提供了最简单的容器的功能,包含了bean生命周期的控制,调用初始化方法和销毁方法,ApplicationContext应用上下文 基于BeanFactory之上构建,提供面向应用的服务,并继承了资源,消息,事件,环境,工厂五种能力常见的实现方式。spring中提供了各式各样的IOC容器的实现供用户选择和使用,使用什么样的容器取决于用户的需要。

2024-04-11 10:28:32 983

原创 spring框架构成

Spring Context是Spring上下文,基于Core和Beans模块之上,提供了一种类似于JNDI注册器的框架式的对象访问方法,继承了Beans的特性,为spring核心提供了大量扩展,添加了对国际化、事件传播、资源加载和对Context的透明创建的支持,实际上是一个配置文件,由Spring框架提供上下文信息,ApplicationContext接口是Context模块的关键。Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,包括JDO、Hibernate和iBatis。

2024-04-10 10:22:59 750

原创 hibernate注解方式

现在很多时候大家都认为使用xml配置过于繁琐,更习惯于使用注解的方式进行配置hibernate的映射关系了,可以将注解放在属性上,也可以放在getter方法上。使用注解方式的话在构建配置时由于没有了映射配置文件,需要addAnnotatedClass所对应的实体类。hibernate注解方式。

2024-04-09 10:09:50 374

原创 hibernate缓存

一级缓存是session级别的缓存,且是一种强制使用的缓存,不可以关闭,保证一个session中两次请求同一个对象时,取得的对象是同一个Java实例。二级缓存是属于sessionFactory的外置缓存,默认情况下hibernate是不会启用的,需要第三方的插件。一级缓存 session级别的缓存,属于事务范围的缓存,由hibernate来管理。SwarmCache 可作为集群范围内的缓存,不支持hibernate的查询缓存。EHCache 可作为进程范围内的缓存,支持hibernate查询缓存。

2024-04-08 09:54:01 425

原创 hibernate批量操作

通过session批量操作时:session的save()及update()方法会把处理的对象存放在自己的缓存中,如果使用session来处理大量持久化对象,需要及时从缓存中清空已经处理完毕且不会再访问的对象(处理完一批对象后,立即调用flush()方法刷新缓存,然后调用clear()方法清空缓存)通过同一个StatelessSession加载相同OID的对象,会得到两个具有不同内存地址的对象。调用save()、update()、delete()方法时会立即执行SQL语句。有以下四种方式来进行批量操作。

2024-04-07 10:09:44 707

原创 hibernate检索方式

默认情况下hibernate查询返回的是一个个的Object[],如果查询部分字段的话,需要一个一个的去遍历赋值。HQL检索方式和本地检索方式可以使用Transformers的aliasToBean方法来返回一个结果转换器。HQL检索方式:使用面向对象的HQL(Hibernate Query Language)查询语言Query。setParameter() 绑定任意类型的参数,该方法的第三个参数显示指定Hibernate映射类型。OID检索方式 :使用OID来获取对象get()和load()方法。

2024-04-06 15:21:09 310

原创 hibernate检索策略

延迟检索:在调用load方法时不会执行select语句,而是返回一个代理对象,这个代理对象继承了原来对象的所有属性和方法(使用CGLIB生成的代理类),该代理类的实例仅初始化OID,所以占用的内存较少,只有在使用具体属性(除id之外的属性)的时候才会去执行select语句。extra 在调用iterator()方法时会进行初始化,而调用size()、isEmpty()、contains方法时,不会进行初始化,而是通过特定的select语句来查询必要的信息,而不是检索所有的对象。

2024-04-05 14:30:40 1076

原创 hibernate关联关系

从Order到Customer是多对一关联,从Customer到order是一对多关联,如果仅有从Order到Customer的关联或者仅有从Custom到Order的关联的话,称为单向关联,如果同时包含两种关联,称为双向关联。上面建立了order到customer的多对一关联,但是这样在操作customer的时候还要再去手动的去查所对应的order,这样操作很是麻烦,所以在建立从customer到order的一对多关联,这样就构建成了一个双向关联。Many-to-Many 多对多关系。

2024-04-04 14:05:03 584

原创 hibernate OID映射对象标识符

默认为hibernate_unique_key表的next_hi字段 注意:hilo的方式需要在单独的事务中处理,不使用session对象的当前数据库连接和事务,而是单独的在一个新的数据库连接中创建新的事务,与spring结合时以及配置数据源时注意不可使用该方式生成。关系型数据库通过主键来区分同一张表的不同数据,java语言使用内存地址来区分同一类的不同对象,hibernate则使用OID来同一两者之间的矛盾,在运行时,hibernate通过OID来维持java对象和数据库表中记录的对应关系。

2024-04-03 10:02:14 443

原创 hibernate session接口

session能够在某些时间点,按照缓存中对象的变化来执行相关的SQL语句,来同步更新数据库,这一过程称为刷新缓存(flush)。一般情况下,游离对象是由持久化对象转变过来的(session进行close、clear、evict等情况),数据库中可能还存在它对应的记录,但是因为会话已经消失,对象不在持久化管理之内,所以处于游离状态。session实例没有结束生命周期,且没有清理缓存,则存放在session缓存中的对象也不会结束生命周期,session缓存可以减少访问数据库的频率。

2024-04-02 09:58:25 885

原创 hibernate session管理

https://zhhll.icu/2020/框架/hibernate/基础/5.hibernate session管理/](https://zhhll.icu/2020/框架/hibernate/基础/5.hibernate session管理/)分别对应于hibernate配置文件中hibernate.current_session_context_class属性的三个值。在使用session时,使用sessionFactory.getCurrentSession()来获取当前线程的session。

2024-04-01 10:02:08 185

原创 hibernate开发步骤

使用非final的类:如果没有实现接口的话,hibernate会使用cglib来生成代理,final类不可以生成cglib代理。提供一个无参构造器:hibernate使用Constructor.newInstance()来实例化。实体类的字段要声明get/set方法:hibernate通过get/set方法来获取字段。通过hibernate访问数据库。创建hibernate配置文件。hibernate访问数据库。hibernate开发步骤。hibernate配置文件。hibernate映射文件。

2024-03-31 13:52:21 564

原创 hibernate映射文件详解

有些属性的值需要在运行时进行计算才可以获取到,此时可以使用property元素的formula属性,该属性用来设置一个SQL表达式,hibernate根据SQL来计算出派生属性的值。class属性的dynamic-insert属性 默认为false,如果为true,表示当保存一个对象时,会动态的生成insert语句,仅包含取值不为null的字段。class属性的dynamic-update属性 默认为false,如果为true,表示当更新一个对象时,会动态的生成update语句,仅包含需要更新的字段。

2024-03-30 11:34:06 324

原创 hibernate配置文件详解

hibernate的配置文件在hibernate.cfg.xml文件中编写。hibernate配置文件。

2024-03-29 10:05:48 501

原创 hibernate是什么

事件及事件监听接口:在Hibernate中,针对每种事件都有相应的事件监听器,如加载对象会触发org.hibernate.event.LoadEvent事件,该事件由org.hibernate.event.LoadEventListener监听器处理。Session被称为持久化管理器,它提供了和持久化相关的操作,如保存、更新、删除、加载和查询对象,是hibernate运作的中心,所有持久化对象必须在session管理下才可以进行持久化操作。需要很大的缓存来存放预定义的SQL语句及映射元数据等。

2024-03-28 10:39:18 593

原创 并发容器之ConcurrentSkipListMap

SkipList让已排序的数据分布在多层链表中,以0-1随机数决定一个数据的向上攀升与否,通过以时间换空间,在每个节点中增加了向前的指针,在插入、删除、查找时可以忽略一些不可能涉及到的节点,从而提高效率。每一层都是一个有序的链表,默认是升序,也可以根据创建映射时所提供的Comparator进行排序,具体取决于使用的构造方法。如果一个元素出现在Level i 的链表中,则它在Level i 之下的链表也都会出现。每个节点包含两个指针,一个指向同一链表中的下一个元素,一个指向下面一层的元素。

2024-03-27 10:16:50 291

原创 并发容器之BlockingQueue阻塞队列

生产者生产的数据直接会被消费者获取并消费,只会在没有可消费的数据时,阻塞数据的消费者,生产者生产数据的速度绝对不能快于消费者消费数据的速度,否则时间一长,会最终耗尽所有的可用堆内存空间,newCachedThreadPool线程池使用了该队列。BlockingQueue接口是在jdk5版本提供的,在线程池中用到了阻塞队列来实现,阻塞队列是深入学习线程池的基础,该队列通常是有限的容量,如果队列已满添加操作就会阻塞,如果队列为空,移除操作就会阻塞。,创建时需要指定容量,实现了FIFO(先进先出)排序机制。

2024-03-26 12:11:44 832

原创 并发容器之ConcurrentMap

哈希函数根据hashCode计算出哈希值,这里的hash值与HashMap的计算方式稍微有点不同,在低十六位异或高十六位之后还需要与HASH_BITS在进行与运算,HASH_BITS的值是0x7fffffff,转为二进制是31个1,进行与运算是为了保证得到的hash值为正数。CAS包含三个操作数,---内存中的值(V),预期原值(A),新值(B) 如果内存中的值和A的值一样,就可以将内存中的值更新为B。CAS是compare and swap的缩写,即我们所说的比较交换,CAS属于乐观锁。

2024-03-25 10:01:38 608

原创 并发容器之CopyOnWrite

CopyOnWriteArrayList是同步List的并发替代品,是java并发包java.util.concurrent中提供的用于并发操作且线程安全的ArrayList,可以提供更好的并发性,并且避免了在迭代期间对容器加锁和复制,在每次修改的时,会创建一个新的容器拷贝,以此来实现可变性。当写共享数据时,将旧数据复制出来一份作为新数据,只修改新数据,修改完新数据后将新数据的引用赋值给原来数据的引用,在写数据的过程中,所有读取共享数据都是读的旧数据。当读取共享数据时,直接读取,不需要有其他操作。

2024-03-24 13:56:25 803

原创 并发容器之ConcurrentLinkedQueue

head 和 tail 的更新总是间隔了一个,是为了减少CAS的更新操作,如果大量的入队操作,每次都要执行 CAS 进行 tail 的更新,汇总起来对性能也会是大大的损耗。head 更新时机:并不是每次出队时都更新 head 节点,当 head 节点里有元素时,直接弹出 head 节点里的元素,而不会更新 head 节点;tail 更新时机:tail 节点不总是尾节点,如果 tail 节点的 next 节点不为空,则将入队节点设置成 tail 节点;如果队列中存在该元素,则删除该元素。

2024-03-23 14:03:30 436

原创 LongAdder升级版的AtomicLong

在使用AtomicLong时,如果是在高并发场景下去同时竞争修改同一个原子变量,由于内部使用的是CAS,只会有一个线程修改成功,这就造成了大量的线程竞争失败后,通过无限循环来不断的进行CAS操作,白白的浪费了CPU资源,在JDK8中为了解决这种问题,提供了LongAdder来进行原子性递增递减。当多线程争夺同一个Cell原子变量时如果失败,并不是在当前Cell变量上一直自旋CAS重试,而是会尝试在其他Cell变量上进行CAS尝试,增加了CAS成功的可能性。

2024-03-22 10:18:03 321

原创 什么是CAS操作

之前说在java.util.concurrent.atomic包下提供的原子操作类底层使用的是CAS,那么什么是CAS呢,CAS的全称为Compare And Swap,比较并替换,CAS机制中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。解决这个问题很简单,ABA的本质就是无法感知中间过程,那么加一个版本号就可以了,每次版本号递增1,在比较时,不仅要比较内存地址V和旧的预期值A,还要比较一下版本号。虽然CAS采用的无锁操作来提供性能,但是CAS并不是完美的,存在了很多的不足。

2024-03-21 10:36:02 722

原创 java的原子操作

在java.util.concurrent.atomic包下提供了很多原子操作类,多个线程执行一个操作时,其中任何一个线程要么完全执行此操作,要么没有执行此操作的任何步骤,其内部使用的CAS操作。JVM会根据处理器的特性适当的重新排序机器指令,使机器指令更符合CPU的执行特点,最大限度的发挥机器的性能,但是会导致执行顺序可能会与代码顺序不一致。以AtomicInteger为例。

2024-03-20 11:53:56 199

原创 java内存模型JMM?

线程A和线程B之间交互,有一个共享变量x,在一开始时本地内存A、本地内存B、主内存中x的值都是0,线程A执行后,将x的值置为1,所以线程A的本地内存A中x的值变为1,当线程A和B进行通信时,线程A先将自己本地内存A中的x刷新到主内存中,此时主内存中的x变为了1,随后,线程B从主内存中读取x的值,此时线程B的本地内存B也变成了1。(线程操作共享变量时,先从主内存复制共享变量到自己的工作内存,然后对工作内存里的变量进行处理,处理完之后将变量值更新到主内存),不可以直接操作主内存的变量。LoadStore;

2024-03-19 10:18:11 770

原创 多线程的异常处理机制

在线程中如果出现异常想要额外进行一些操作的话,可以使用线程的异常处理机制,UncaughtExceptionHandler,这是线程的一个子接口,当一个未捕获的异常导致线程中断的时候JVM会使用thread.getUncaughtExceptionHandler()来查询线程的uncaughtExceptionHandler并将线程和异常作为参数传递给uncaughtException方法。方式二:继承ThreadPoolExecutor来重写afterExecute方法,处理异常。自定义Handler。

2024-03-18 09:48:27 639

mysql元数据工具类

可以获取数据库所有表、获取表字段信息

2024-01-23

Hive-JSON-Serde-1.3.8.zip

Hive-JSON-Serde-1.3.8.zip

2022-05-23

consul_1.10.2_darwin_amd64.zip

consul_1.10.2_darwin_amd64.zip

2022-05-22

hbase-2.2.7-bin.tar.gz

hbase-2.2.7-bin.tar.gz

2022-05-21

Mycat-server-1.6.7.4-release-20200105164103-mac.tar.gz

Mycat-server-1.6.7.4-release-20200105164103-mac.tar.gz

2022-05-20

Nacos-2.0.3.zip

Nacos-2.0.3.zip

2022-05-19

redis-unstable.tar.gz

redis-unstable.tar.gz

2022-05-18

resin-4.0.65.tar.gz

resin-4.0.65.tar.gz

2022-05-17

resin-4.0.65-src.tar.gz

resin-4.0.65-src.tar.gz

2022-05-16

scala-2.13.3.tar

scala-2.13.3.tar

2022-05-15

Sentinel-1.7.2.zip

Sentinel-1.7.2.zip

2022-05-14

apache-shardingsphere-incubating-4.0.1-sharding-proxy-bin.tar.gz

apache-shardingsphere-incubating-4.0.1-sharding-proxy-bin.tar.gz

2022-05-13

sysbench-1.0.20.zip

sysbench-1.0.20.zip

2022-05-12

thrift-0.13.0.tar

thrift-0.13.0.tar

2022-05-11

apache-tomcat-8.5.57-src.tar.gz

apache-tomcat-8.5.57 源码包

2022-05-10

32dbb32e528357ef1ec0b8863dd9--Docker.dmg

macos docker软件包

2022-05-09

elasticsearch-hadoop-6.8.23.zip

elasticsearch-hadoop

2022-05-08

apache-echarts-4.9.0-incubating-src.zip

echarts

2022-05-07

BaiduNetdisk_mac_3.4.1.dmg

百度网盘mac

2022-05-06

edraw-max_cn_full5381.dmg

edraw-max_cn_full5381.dmg

2022-05-05

electerm-1.18.5-mac-x64.dmg

mac 好用的ssh桌面终端软件

2022-05-04

Feishu-3.29.3.dmg

飞书mac

2022-05-03

KDocs_1001_v2.1.0.dmg

KDocs_1001_v2.1.0.dmg

2022-05-02

kplayer201.zip

kplayer201.zip 播放器

2022-05-01

mailmaster.dmg

mailmaster.dmg

2022-04-30

MavenRunHelper.zip

MavenRunHelper

2022-04-29

scala-intellij-bin-2020.1.43

scala-intellij-bin-2020.1.43 idea插件

2022-04-28

WeChatMac安装包

微信mac安装包

2022-04-27

ffmpeg应用程序(mac)

ffmpeg应用程序

2022-04-26

Statistic-4.0.jar

Statistic-4.0.jar

2022-04-25

hadoop-lzo-0.4.16

依赖包

2022-04-22

maven-thrift-plugin-0.1.10

maven插件 maven-thrift-plugin-0.1.10

2022-04-21

thrift-maven-plugin-0.10.0

maven插件jar包

2022-04-20

Typora mac版本 Typora.dmg

Typora编写markdown的神器,0.9.9.34.2

2022-04-19

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除