新时代码农
未读每天一个 Linux 命令less 命令 less 命令 的作用与 more 十分相似, 都可以用来浏览文字档案的内容, 不同的是 less 命令允许用户向前或向后浏览文件, 而 more 命令只能向前浏览. 用less 命令显示文件时, 用 PageUp 键向上翻页, 用 PageDown 键向下翻页. 要退出 less 程序, 应按 Q 键. 12345678-e: 文件内容显示完毕后, 自动退出;-f: 强制显示文件;-g: 不加亮显示搜索到的所有关键词, 仅显示当前显示的关键字, 以提高显示速度;-l: 搜索时忽略大小写的差异;-N: 每一行行首显示行号;-s: 将连续多个空行压缩成一行显示;-S: 在单行显示较长的内容, 而不换行显示;-x< 数字 >: 将 TAB 字符显示为指定个数的空格字符. 抽象工厂模式练习Sunny 软件公司欲推出一款新的手机游戏软件, 该软件能够支持 Symbian、Android 和 Windows Mobile 等多个智能手机操作系统平台, 针对不同的手机操作系统,该游戏软件提供了不同的游戏操作控制 (OperationC ...
新时代码农
未读每天一个 Linux 命令more 命令 more 命令是一个基于 vi 编辑器文本过滤器, 它以全屏幕的方式按页显示文本文件的内容, 支持 vi 中的关键字定位操作. 123456按 空格 键: 显示文本的下一屏内容.按 回车 键: 只显示文本的下一行内容./: 接着输入一个模式, 可以在文本中寻找下一个相匹配的模式.按 h 键: 显示帮助屏, 该屏上有相关的帮助信息.按 b 键: 显示上一屏内容.按 q 键: 退出 rnore 命令 1234567-< 数字 >: 指定每屏显示的行数;-d: 显示“[press space to continue,'q' to quit.]”和“[Press 'h' for instructions]”;-c: 不进行滚屏操作. 每次刷新这个屏幕;-s: 将多个空行压缩成一行显示;-u: 禁止下划线;+< 数字 >: 从指定数字的行开始显示. 1234# 显示文件 file 的内容, 但在显示之前先清屏, 并且在屏幕的最下方显示完核的百分比.more -dc file# 显 ...
每天一个 Linux 命令cat cat 命令连接文件并打印到标准输出设备上, cat 经常用来显示文件的内容, 类似于下的 type 命令. 123456-n 或 -number: 有 1 开始对所有输出的行数编号;-b 或 --number-nonblank: 和 -n 相似, 只不过对于空白行不编号;-s 或 --squeeze-blank: 当遇到有连续两行以上的空白行, 就代换为一行的空白行;-A: 显示不可打印字符, 行尾显示“$”;-e: 等价于"-vE"选项;-t: 等价于"-vT"选项; 123cat file1 # 显示 文件 file1 中的内容cat file1 file2 # 同时显示 file1 和 file2 的内容cat file1 file2 > file # 将文件 file1 和 file2 合并和放入 file 中 回顾 简单工厂模式优点: 将创建和使用分离, 遵循单一原则 引入配置文件, 遵循开闭原则 使用别名代替复杂的类名, 简化代码 缺点: 如果要添加新的产品类时, 必须修改 ...
单一职责原则 (Single Responsibility Principle, SRP)定义: 一个类只负责一个功能领域中相应职责 (对一个类而言, 应该只有一个引起它变化的原因) 作用:实现高内聚, 低耦合 案例:客户信息图形统计模块 违背单一职责原则如果修改数据库连接方式或者修改图标显示方式都需要修改这个类;不能重用数据库连接的代码 重构 代码实现: 12345678910111213141516171819202122232425class CustomerDataChart { private CustomerDao customerDao; public void createChart(){ System.out.println("创建图表"); } public void displayChart(){ System.out.println("显示图表"); }}class CustomerDao ...
新时代码农
未读每天一个 Linux 命令ls 命令 12345678910111213141516171819202122-a: 显示所有档案及目录(ls 内定将档案名或目录名称为“.”的视为影藏, 不会列出);-A: 显示除影藏文件“.”和“..”以外的所有文件列表;-C: 多列显示输出结果. 这是默认选项;-l: 与“-C”选项功能相反, 所有输出信息用单列格式输出, 不输出为多列;-F: 在每个输出项后追加文件的类型标识符, 具体含义: “*”表示具有可执行权限的普通文件, “/”表示目录, “@”表示符号链接, “|”表示命令管道 FIFO, “=”表示 sockets 套接字. 当文件为普通文件时, 不输出任何标识符;-b: 将文件中的不可输出的字符以反斜线“”加字符编码的方式输出;-c: 与“-lt”选项连用时, 按照文件状态时间排序输出目录内容, 排序的依据是文件的索引节点中的 ctime 字段. 与“-l”选项连用时, 则排序的一句是文件的状态改变时间;-d: 仅显示目录名, 而不显示目录下的内容列表. 显示符号链接文件本身, 而不显示其所指向的目录列表;-f: 此参数的效果 ...
验证查询查询语句可以变得非常复杂,特别是与不同的分析器和字段映射相结合后,就会有些难度。validate API 可以验证一条查询语句是否合法。 12345678GET /gb/tweet/_validate/query{ "query": { "tweet" : { "match" : "really powerful" } }} 以上请求的返回值告诉我们这条语句是非法的: 12345678{ "valid": false, "_shards": { "total": 1, "successful": 1, "failed": 0 }} 理解错误信息想知道语句非法的具体错误信息,需要加上 explain 参数: 12345678G ...
查询语句和过滤语句合并查询语句和过滤语句可以放在各自的上下文中。 在 ElasticSearch API 中我们会看到许多带有 query 或 filter 的语句。 这些语句既可以包含单条 query 语句,也可以包含一条 filter 子句。 换句话说,这些语句需要首先创建一个 query 或 filter 的上下文关系。 复合查询语句可以加入其他查询子句,复合过滤语句也可以加入其他过滤子句。 通常情况下,一条查询语句需要过滤语句的辅助,全文本搜索除外。 所以说,查询语句可以包含过滤子句,反之亦然。 以便于我们切换 query 或 filter 的上下文。这就要求我们在读懂需求的同时构造正确有效的语句。 带过滤的查询语句过滤一条查询语句 比如说我们有这样一条查询语句: 12345{ "match": { "email": "business opportunity" }} 然后我们想要让这条语句加入 term 过滤,在收信箱中匹配邮件: 12345{ ...
查询过滤关键字 term 过滤term 主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串 (未经分析的文本数据类型): 1234{ "term": { "age": 26 }}{ "term": { "date": "2014-09-01" }}{ "term": { "public": true }}{ "term": { "tag": "full_text" }} terms 过滤terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配: 12345{ ...
关系型数据库和 ES 对比 12Relational DB -> Databases -> Tables -> Rows -> ColumnsElasticsearch -> Indexing -> Types -> Documents -> Fields Elasticsearch 集群可以包含多个索引 (indices)(数据库),每一个索引可以包含多个类型 (types)(表),每一个类型包含多个文档 (documents)(行),然后每个文档包含多个字段 (Fields)(列) 「索引」含义的区分 你可能已经注意到索引 (index) 这个词在 Elasticsearch 中有着不同的含义,所以有必要在此做一下区分:索引(名词) 如上文所述,一个索引 (index) 就像是传统关系数据库中的数据库,它是相关文档存储的地方,index 的复数是 indices 或 indexes。索引(动词) 「索引一个文档」表示把一个文档存储到索引(名词)里,以便它可以被检索或者查询。这很像 SQL 中的 INSERT 关键字 ...
新时代码农
未读外部排序:通过 Comparator 实现个性化排序使用 Comparator 的基本步骤 定义一个实现了 Comparator<T> 接口的类,其中需要实现 compare 方法。 使用 Collections.sort(List list, Comparator c) 对列表进行排序。 示例代码:Person 类123456789101112131415161718192021public class Person { private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } @Override public String toString() { return & ...
新时代码农
未读动态获取加载的 Jar 包有时我们需要在运行时确定一个特定类所对应的 JAR 包或目录的位置。为此我们提供了ClassLocationUtils.where(cls)这个静态工具方法来帮助识别指定类的来源文件。 123456789101112131415161718192021222324252627282930313233343536import java.io.File;import java.net.MalformedURLException;import java.net.URL;import java.security.CodeSource;import java.security.ProtectionDomain;public class ClassLocationUtils { public static String where(final Class<?> cls) { if (cls == null)throw new IllegalArgumentException("null input: c ...
新时代码农
未读在 Java 开发中,我们经常需要进行字符串的拼接和处理集合中的元素。此外,在某些特定场景下,如性能监控或代码调试时,也需要查看 GC 日志以及字节码信息。本文将详细介绍这些常用技术及其最佳实践。 字符串拼接方法使用 org.apache.commons.lang.StringUtils 拼接123import org.apache.commons.lang3.StringUtils;String result = StringUtils.join(array, "-"); 该方法使用指定的分隔符(如这里的’-‘)将数组中的元素连接成一个字符串。 使用 Google Guava 的 Joiner 类12import com.google.common.base.Joiner;String result = Joiner.on('-').join(array); Guava 库提供的Joiner类可以更加灵活地拼接字符串,支持多种分隔符和自定义转换函数。 获取集合中的第一个元素使用 Iterables.getOnlyElement 方法 ...
新时代码农
未读本文将详细介绍几种常见的 Java 编程技术及其相关知识点,并提供一些最佳实践和注意事项。这些内容包括面向切面编程(AOP)、使用 Jackson 进行泛型反序列化、单次执行逻辑的实现方法,以及防止主线程退出等。 面向切面编程 (Aspect-Oriented Programming, AOP)代码片段展示1234567891011try { try { doBefore(); // 对应@Before注解的方法切面逻辑 method.invoke(); } finally { doAfter(); //对应@After注解的方法切面逻辑 } doAfterReturning(); //对应@AfterReturning注解的方法切面逻辑} catch (Exception e) { doAfterThrowing(); // 对应@AfterThrowing注解的方法切面逻辑} 解释与注意事项AOP 是一种编程范式,用于将横 ...
Java 8 引进了强大的 Stream API,使得集合操作更加简洁优雅。本文将详细介绍如何使用 Java 8 的 Stream API 进行 List 转 Map、List 排序、列表过滤及 Map 中的条件操作。 使用 Java 8 Lambda 将 list 转为 map常用方式要将一个 List 转换为 Map,我们可以利用 Collectors.toMap() 方法。例如: 123public Map<Long, String> getIdNameMap(List<Account> accounts) { return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername));} 收集成实体本身 map有时候我们可能希望将列表中的对象直接映射到 Map 中作为值,可以这样做: 123public Map<Long, Account> getIdAccountMap(List<Account&g ...