🧱 后端开发与架构
未读每天一个 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 ...
🧩 开发框架与中间件
未读Zookeeper 是 Google 的 Chubby 一个开源的实现,是 Hadoop 的分布式协调服务 自 2010 年 10 月升级成 Apache Software Foundation(ASF) 顶级项目 分布式协调服务, 提供以下功能: 组管理服务 分布式配置服务 分布式同步服务 分布式命名服务 谁在使用 Zookeeper开源软件 HBase 开源的非关系型分布式数据库 Solr Apache Lucene 项目的开源企业搜索平台 Storm 分布式计算框架 Neo4j 高性能的,Nosql 图形数据库 … 公司 Yahoo LinkedIn Twitter Taobao … Zookeeper 架构 客户端随机连接集群中的任何一台 server 集群内所有的 server 基于 Zab(ZooKeeper Atomic Broadcast) 协议通信 集群内部根据算法自动选举出 leader, 负责向 follower 广播所有变化消息 集群中每个 follower 都和 leader 通信 follower 接收来自 leader 的所有变化 ...
🧱 后端开发与架构
未读Python 面向对象基础部分 中秋在家没事, 写了一个很久以前就想写的脚本 如果下午 6 点 10 分还连接着公司的 wifi, 就发邮件给老婆说要加班 为什么要发邮件而不发短信呢, 因为短信接口要钱….最近买了个 4k 的显示器, 拿来外接 mac 看代码, 爽翻了, 不过有点蛮烦的就是每次都要拖动鼠标到另一个屏幕上去, 不过全国最大的同性交友网站 GitHub上面有一款开源的软件叫 CatchMouse 解决了这个问题 下载地址: CatchMouse 另一个问题是如果想把软件从 mac 屏幕放到外接显示屏的话, 还是要拖过去, 但是….另一款神器 Moon 能帮我们快速的把当前应用移动到外接显示器上, 光标定位到需要移动的 app 上, 快捷键 contro+` 即可 接下来是脚本 我的思路是: 先检测当前连接的是哪里的 wifi如果是公司的 wifi, 且当前时间大于 6 点 10 分, 则给老婆发送邮件如果连接的是家里的 wifi, 则检测是否连接了外接显示器,如果连接了, 则检测是否开启了 CatchMouse.app, 没有则打开. 接下来开始撸代 ...















