20 Matching Annotations
  1. Mar 2022
    1. 在分布式环境中协调和管理服务是一个复杂的过程

      ZooKeeper 通过其简单的架构和 API 解决了这个问题。ZooKeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。

  2. Feb 2022
    1. 如果你已经设置了自动提交或你使用了外部事务管理器,这些方法就没什么作用了。然而,如果你正在使用由 Connection 实例控制的 JDBC 事务管理器,那么这四个方法就会派上用场

      void commit() void commit(boolean force) void rollback() void rollback(boolean force)

    1. 你可能对 ExecutorType 参数感到陌生。这个枚举类型定义了三个值:

      ExecutorType.SIMPLE:该类型的执行器没有特别的行为。它为每个语句的执行创建一个新的预处理语句。 ExecutorType.REUSE:该类型的执行器会复用预处理语句。 ExecutorType.BATCH:该类型的执行器会批量执行所有更新语句,如果 SELECT 在多个更新中间执行,将在必要时将多条更新语句分隔开来,以方便理解。

    1. 如何获取一个 SqlSession 实例

      SqlSessions 是由 SqlSessionFactory 实例创建的。SqlSessionFactory 对象包含创建 SqlSession 实例的各种方法。而 SqlSessionFactory 本身是由 SqlSessionFactoryBuilder 创建的,它可以从 XML、注解或 Java 配置代码来创建 SqlSessionFactory。

    1. 要在带注解的映射器接口类中使用动态 SQL,可以使用 script 元素。

      @Update({"<script>", "update Author", " <set>", " <if test='username != null'>username=#{username},</if>", " <if test='password != null'>password=#{password},</if>", " <if test='email != null'>email=#{email},</if>", " <if test='bio != null'>bio=#{bio}</if>", " </set>", "where id=#{id}", "</script>"}) void updateAuthorValues(Author author);

    1. 在上面的例子中,你可以看到,博客(Blog)作者(author)的关联元素委托名为 “authorResult” 的结果映射来加载作者对象的实例。

      套娃中娃

    1. 最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。

      这样Mybatis就可以通过反射操作

    1. 为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder 即可。可以接受环境配置的两个方法签名是:

      重载方法

    1. 那个项目虽然仅仅用SSM,但是代码质量还是很高的,各种封装和抽象,与之相比我之前写的项目代码都显得十分“扁平”。

      代码简洁之道,阿里巴巴java开发手册

    1. 当我们的程序在运行时,需要动态的加载一些类这些类可能之前用不到所以不用加载到jvm,而是在运行时根据需要才加载

      极大地提高了程序的灵活性,这也是Java被称为动态语言的原因

    1. 在提取知识的过程中部分得越「麻烦」就越容易引发共鸣。这种「麻烦」的折腾其实就是将书中的要点进行整合,在整合的过程中串起相关知识,进而梳理聚合成一个适合我们自己的框架,一个知识图谱。

      因为这是一个整理知识的过程,要将知识点连成线,然后织成面,形成体。

  3. Jan 2022
  4. Dec 2021
    1. LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack)。

      什么是LinkedList

    1. 数组进行扩容时,会将老数组中的元素重新拷贝一份到新的数组中,每次数组容量的增长大约是其原容量的1.5倍。这种操作的代价是很高的,因此在实际使用时,我们应该尽量避免数组容量的扩张。当我们可预知要保存的元素的多少时,要在构造ArrayList实例时,就指定其容量,以避免数组扩容的发生。

      扩容是将旧数组的数据转到新的大数组中

    2. 为追求效率,ArrayList没有实现同步(synchronized),如果需要多个线程并发访问,用户可以手动同步,也可使用Vector替代。

      ArrayList不是线程安全的,不保证并发安全访问

    3. ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。

      什么是ArrayList