在idea中自定义注释模板

intellij idea中设置自定义代码模板

首先,在自定义代码模板中新增快捷方式*,并选择触发按键为Enter

代码注释模板定义如下:

  • $description$:定义方法描述字段
  • $author$:定义方法作者
  • $date$:定义方法定义日期
  • $param$:定义方法参数,该参数需要使用自定义groovy脚本
  • $return$:定义方法返回值,该参数需要使用自定义groovy脚本
1
2
3
4
5
6
7
*
*
* @description $description$
* @author $author$
* @date $date$ $time$
$param$ $return$
*/

变量赋值:

1
description = ""
1
author = user()
1
date = time()
1
2
3
4
return = groovyScript("
def param=\"${_1}\";
if(param == \'\' || param == \'void\') return \'\';
return \' \\n * @return \' + param", methodReturnType())
1
2
3
4
5
6
7
8
9
param =  groovyScript("
def result='';
def params=\"${_1}\".replaceAll(\'[\\\\[|\\\\]|\\\\s]\', \'\').split(\',\').toList();
for(i = 0; i < params.size(); i++) {
if(params[i] == \'\') return \' \';
result+=\' * @param \' + params[i] + \' \' + params[i] + ((i < params.size() - 1) ? \' \\n\' : \' \')
};
return result", methodParameters())

java代码中敲入/**,按下Enter键即可看到自动生成的注释

1
2
3
4
5
6
7
8
9
/**
*
* @description
* @author pengkai
* @date 2022/02/22 下午7:33
* @param username username
* @param password password
* @return org.springframework.security.core.userdetails.UserDetails
*/

java中常用的文件操作工具

使用的类库

apache的公共工具包

1
2
## build.gradle
implementation 'commons-io:commons-io:2.11.0'

文件和目录操作类

  1. FileUtils

    • [private] addCopyAttributes:如果原copy option中不存在复制选项,则在赋值选项中追加一个StandardCopyOption.COPY_ATTRIBUTES

java和c++的区别

java和c++的不同点

BASIS FOR COMPARISON C++ Java
Memory Management Managed by developers using pointers. Supports structures and union Controlled by the system, does not use pointers. Supports Threads and Interfaces
Inheritance Provide single and multiple inheritances both Does not support multiple inheritances. Uses the concept of Interface to achieve
Runtime error detection mechanism Programmer’s responsibility System’s responsibility
Libraries Comparatively available with low-level functionalities Provide a wide range of classes for various high-level services
Program Handling Methods and data can reside outside classes. The concept of a global file, namespace scopes available All methods and data reside in the class itself. Concept od Package is used.
Type Semantics Supports consistent support between primitive and object types Different from primitive and object types
Portability Platform dependent as source code must be recompiled for different platform. It uses the concept of bytecode which is platform-independent and can be used with platform-specific JVM.
Polymorphism Explicit for methods supports mixed hierarchies Automatic uses static and dynamic binding

参考文章:https://www.educba.com/c-plus-plus-vs-java/

分布式搜索引擎-elasticsearch

1. elatsticsearch(简写为es)是什么

它是一个实时的分布式、开源的全文本查询和分析引擎,基于java语言开发。

2. es可以做什么

它可以在SPA(single page application-单页应用)中被使用,为用户提供高速的数据查询和分析。且原生支持java应用。

3. 主要特性

它有如下几个主要特性:

  • 可拓展性强,支持高达千兆字节(GB)的数据(不管是结构性的还是非结构性的);
  • 可以作为类似MongoDB和RavenDB等文档存储数据库的替代品;
  • 使用非规范化来提高搜索性能;
  • 企业级的搜索引擎,被大型公司广泛使用;
  • 开源工具,且使用Apache许可证。

4. 关键性的概念

  • 节点:表示单个运行的es实例,es可以在单台服务器上运行多个实例,这完全取决于服务器的物理内存和处理器能力;
  • 集群:一个或者多个节点的集合,在逻辑上提供了集中的数据索引和查询能力,通常表现在横跨多个节点获取完整数据的能力。
  • 索引:不同类型的文档和他们的属性的集合。在关系型数据库中,索引一般用于提升查询性能。
  • 文档:一个使用JSON格式定义的字段集合,而这些字段定义了数据查询的规则。每个文档都属于一种类型并驻留在索引中,每个文档都与一个称为 UID 的唯一标识符相关联。
  • 分片:索引被横向拆分成不同的分片,这意味着每个分片包含了所有的文档属性,但包含的 JSON 对象数量少于索引。水平分离使分片成为一个独立的节点,且可以存储在任何节点,主分片是索引的原始水平部分,然后将这些主分片复制到副本分片中。
  • 副本:es允许用户创建索引和分片的副本。复制不仅有助于在发生故障时提高数据的可用性,而且通过在这些副本中执行并行搜索操作来提高搜索性能。

5. es的优势

  • es 是基于 Java 开发的,这使得它几乎可以兼容所有平台;
  • es 是实时的,也就是说一秒后添加的文档就可以在这个引擎中搜索了;
  • es 是分布式的,这使得它可以轻松地在任何大型组织中扩展和集成。
  • 使用 es 中的网关概念可以轻松创建完整备份。
  • 与 Apache Solr 相比,在 es 中处理多租户非常容易。
  • es 使用 JSON 对象作为响应,这使得使用大量不同的编程语言调用 es 服务器成为可能。
  • es 支持几乎所有文档类型,除了那些不支持文本渲染的文档类型。

6. es的缺点

  • 与 Apache Solr 不同,es 在处理请求和响应数据方面没有多语言支持(仅支持JSON),而Apache Solr 可以支持 CSV、XML 和 JSON 格式。
  • 偶尔,es 会出现**脑裂(Split brain)**的问题。(什么是脑裂)

7. es和关系数据库之间的区别

在 es 中,索引类似于 RDBMS(关系数据库管理系统)中的表。 每个表都是行的集合,就像 es 中的每个索引都是文档的集合一样。
下表给出了这些术语之间的直接比较 -

es RDBMS
集群 数据库
分片 分片
索引
字段
文档

spring实战

认识spring框架

  1. spring框架为开发者做了很多,反过来,它也要求开发者同样对它。

java知识点速记

java bean和pojo的区别

一、 定义

  • POJOPlain Old Java Object的缩写,它主要用来强调某个对象是一个普通的Java对象,而不是一个特殊的对象,尤其不是一个EJB。

    这个术语以其简单易懂的特性被广泛接受并使用,并用来区别那些复杂的对象框架。

  • 一个JavaBean是一个可以被序列化的POJO。有一个默认的无参构造器,并允许使用Getter和Setter方法访问属性。

    对于EJB来说,JavaBean并不是一个单独的类,而是整个组件模型。

    JavaBean是java构建程序中可重用的软件组件,实际开发过程中,它们是使用java语言编写并符合某个约定的类。它们被用来封装一些对象到单个对象(也就是bean)中。

二、 用法

  • POJO主要被用来表明一个java对象不需要跟随任何java对象模型、约定或者框架。最理想的情况,一个POJO应该是一个不和任何框架绑定的java对象,并遵循以下原则:
    1. 不应该继承某个指定的类,比如HttpServlet;
    2. 不应该实现指定的接口,比如EntityBean;
    3. 不应该包含某些框架的注解。
  • JavaBean应该遵循以下原则:
    1. 必须有一个公共的默认构造器,便于实例化;
    2. 属性必须可以通过Getter和Setter或者其他的可以访问并修改的方法进行控制,并遵循标准的命名规范,以便于框架对其进行自动化管理和状态的更新;
    3. 必须可以被序列化,以便于应用和框架以一种独立于VM和操作系统的方式对其进行可靠的保存、存储以及恢复bean的状态。

对于业务程序员来说,这两种类型的java对象其实可以等同,或者说POJO更多强调的是一种业务概念,而JavaBean则属于java编程语言的特性。

mybatis原理学习笔记

mybatis的执行原理:

通常一个Mapper接口对应一个xml文件,Mapper接口中的方法名对应xml中的标签id,而xml中的每一个标签都会被解析为MapperStatement对象。通过xml中定义的namespace属性,可以和接口方法的执行路径相对应。而这个路径应该具有唯一性,所以Mapper接口中的方法不能被重载。Mapper接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Mapper接口生成代理对象,代理对象会拦截接口方法,转而执行MapperStatement所代表的sql语句,然后将执行结果返回。

mybatis的分页原理:

Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内容分页,而非物理分页。

mybatis-pagehelper插件的实现原理:

使用mybatis提供的插件接口,实现自定义插件,在插件内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。