Go语言之旅练习题目与答案
练习:等价二叉查找树Go 语言之旅 (go-zh.org)
题目1. 实现 Walk 函数。
2. 测试 Walk 函数。
函数 tree.New(k) 用于构造一个随机结构的已排序二叉查找树,它保存了值 k, 2k, 3k, …, 10k。
创建一个新的信道 ch 并且对其进行步进:
1go Walk(tree.New(1), ch)
然后从信道中读取并打印 10 个值。应当是数字 1, 2, 3, ..., 10。
3. 用 Walk 实现 Same 函数来检测 t1 和 t2 是否存储了相同的值。
4. 测试 Same 函数。
Same(tree.New(1), tree.New(1)) 应当返回 true,而 Same(tree.New(1), tree.New(2)) 应当返回 false。
Tree 的文档可在这里找到。
答案1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package mainimport ( "fmt" &quo ...
Conventional Commits
定义当多人参与开发时,对于提交的代码需要有一个标准的格式和规范,这就是Conventional Commits(约定式提交)。
Conventional Commits规范是一个定义提交消息格式的规范,其目的是使提交消息能够清晰、简洁、易于阅读,并且能够自动化生成变更日志。其主要包括两个部分:提交消息的结构与提交消息的类型
提交消息的结构提交消息包括两个主要部分:头部和主体。头部由三个部分组成:类型<type>、作用域scope和主题description。类型<type>表示此次提交的目的和意图,作用域scope表示此次提交影响的范围,主题description则简要描述此次提交的内容。主体是可选的,可以用于详细描述此次提交的修改内容。
提交消息的结构应如下所示:
12345<type>[optional scope]: <description>[optional body][optional footer]
例如,下面是一个符合“Conventional Commits”规范的提交消息:
12345sqlCopy codefeat( ...
虚拟机网络配置中的网络模式
定义虚拟机网络配置中的网络模式是指虚拟机在虚拟化环境中使用的网络配置模式。虚拟机通常需要和主机或其他网络设备进行通信,以实现数据交换和资源共享。网络模式决定了虚拟机的网络适配器如何与主机或其他网络设备进行连接,以及如何获取IP地址等网络配置信息。
以下是几种虚拟机网络配置中常见的网络模式
桥接模式(Bridged)虚拟机的网络适配器直接连接到主机上的物理网络适配器上,虚拟机相当于在物理网络中成为了一个独立的网络设备,可以直接获得网络中的IP地址,可以和其他计算机进行通信。
NAT模式(Network Address Translation)虚拟机的网络适配器连接到虚拟机监控器创建的虚拟网络中,虚拟机会获得虚拟网络中的IP地址,而不会直接获得物理网络中的IP地址。虚拟机监控器会自动将虚拟机中的网络请求转换为主机的网络请求,并将主机的响应返回给虚拟机,实现虚拟机和物理网络之间的通信。
主机模式(Host-Only)虚拟机的网络适配器只能和主机进行通信,无法和物理网络中的其他计算机进行通信。虚拟机会获得一个虚拟网络中的IP地址,但这个IP地址只能被主机和其他使用主机模式的虚拟机访问。
内部网 ...
Linux预备知识
Linux与Unix的区别Linux和Unix之间有着密切的关系,Linux实际上是受Unix启发而开发出来的操作系统。Unix是一个历史悠久的操作系统,最初是由AT&T的贝尔实验室在20世纪60年代末期开发的。Unix拥有稳定、高效、安全等特点,并广泛应用于服务器、工作站、超级计算机等领域。
Linux最初是由芬兰大学生Linus Torvalds在1991年开发的,当时他是为了学习操作系统而开始开发了一个类Unix的操作系统。Linux最初使用了Unix的很多设计思想和技术,如文件系统、进程管理、内存管理等,因此Linux和Unix非常相似,有许多共同点。(GNU计划)
虽然Linux和Unix有很多相似之处,但也有一些不同。Linux是自由和开放源代码的操作系统,而Unix则是商业软件,需要支付许可费用。此外,Linux具有更好的兼容性和可定制性,可以在不同的硬件平台上运行,并且可以根据需要选择不同的发行版。而Unix则只能运行在少数特定的硬件平台上,并且缺乏灵活性和可定制性。
Linux的分区Linux的分区是操作系统中一个非常重要的概念,它可以让用户将硬盘空间划分成不 ...
正则表达式
简介正则表达式 (regular expressions) 是一个非常有用的工具,可以从诸如代码、日志文件、电子表格或文档等文本中提取信息。虽然规范的语言背后有许多理论,但后续的课程和例子将探索正则表达式的更实际的用法,以便您能够尽快使用这个工具。
在使用正则表达式时要认识到的第一件事是:所有东西本质上都是字符,我们正在编写模式 (pattern) 来匹配特定的字符序列(也称为字符串)。大多数模式使用普通的 ASCII 字符,包括字母、数字、标点符号和键盘上的其他符号,如 %#$@!,但是也可以使用 unicode 字符来匹配任何类型的国际文本。
基础语法
举例
说明
abc
匹配拥有abc的字符串
\d
匹配从 0 到 9 的任意数字
\w
字母数字 (alphanumeric) 元字符,匹配英文文本中的字符,相当于字符范围 [A-Za-z0-9_]
\s
可以匹配空格 (␣)、制表符 (\t)、换行 (\n) 和回车 (\r)等任意空白符(利用\s+可以匹配连续空格)
\b
匹配单词和非单词字符之间的边界。在捕获整个单词时最有用,例如模式 \w+\b
...
Java的字符串操作方法
String常用方法String的方法很多,重载方法也很多,这里只是列出方法名和返回值类型和大概功能,给自己遗忘时查看,具体使用时可以Ctrl+点方法名查看源码(如果使用IEDA的话)。
方法名
功能
char charAt()
返回指定位置的字符
int indexOf()
返回指定子字符串在字符串中第一次出现的位置
int lastIndexOf()
返回指定子字符串在字符串中最后一次出现的位置
String substring()
返回字符串中指定位置的子串
String toLowerCase()
将字符串转换为小写字母
String toUpperCase()
将字符串转换为大写字母
String trim()
删除字符串首尾的空格
String replace()
用指定的字符串替换字符串中的另一个字符串
String replaceAll()
使用正则表达式替换字符串中的另一个字符串
String [] split()
将字符串分割成子字符串数组
Sting format()
使用指定的格式字符串和参数格式化字符串
...
Git使用指南
git简介Git是一个免费、开源的分布式版本控制系统,用于管理代码和其他计算机文件的版本控制。它最初由Linus Torvalds为了管理Linux内核源代码而创建,现在已成为许多开源和商业软件项目的标准版本控制工具。
与集中式版本控制系统(如Subversion)不同,Git是一种分布式版本控制系统,这意味着每个开发人员都有一个本地存储库,其中包含完整的项目历史记录。这使得开发人员可以在没有网络连接的情况下工作,并且使得合并和更改管理变得更加简单。
初次运行 Git 前的配置既然已经在系统上安装了 Git,你会想要做几件事来定制你的 Git 环境。 每台计算机上只需要配置一次,程序升级时会保留配置信息。 你可以在任何时候再次通过运行命令来修改它们。
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:
/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果在执行 git config 时带上 --system 选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此 ...
Logback日志框架简要说明
什么是logbackLogback 是一个开源的 Java 日志框架,是 log4j 框架的改进版,具有更快的执行速度、更好的灵活性和更强的功能。下面是 Logback 的用法、配置方法和日志级别。Logback 已经被整合到 Spring 和 Spring Boot 中了。
Logback 的用法单独使用 Logback 框架,需要在项目的 pom.xml 文件中引入 logback-classic 和 logback-core 两个依赖:
123456789101112<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version></dependency><dependency> <groupId>ch.qos.logback</groupId> <artifactId> ...
Http常用状态码
什么是http状态码HTTP状态码是一个3位数字,用于表示HTTP请求的处理结果。以下是常见的HTTP状态码:
1xx(信息性状态码):表示请求已被接受,需要继续处理。
2xx(成功状态码):表示请求已成功被服务器接收、理解、并接受。
3xx(重定向状态码):表示需要客户端采取进一步的操作才能完成请求。
4xx(客户端错误状态码):表示客户端发送的请求有误,服务器无法处理。
5xx(服务器错误状态码):表示服务器在处理请求时发生了错误。
常见的htpp状态码
状态码
含义
200 OK
请求已成功处理
201 Created
请求已成功处理,并创建了新的资源
204 No Content
请求已成功处理,但返回的响应报文中不含实体的主体部分
301 Moved Permanently
永久性重定向,请求的资源已被分配了新的URI
302 Found
临时性重定向,请求的资源已被分配了新的URI
304 Not Modified
发起了条件请求,但服务器判断资源未改变,允许缓存使用
400 Bad Request
请求报文存在语法错误
401 U ...
Spring常用注解用法与核心思想名词解释
Spring常用注解
注解
用法
@Configuration
标记配置类
@Component
标记为组件,组件将在IoC容器中实例化,可以指定实例的名字,在容器中默认单例模式
@Repository
标记数据访问层(DAO)组件,内部包含@Component
@Controller
标记控制器组件,内部包含@Component
@Bean
标记Bean组件,内部包含@Component
@Service
标记服务组件,内部包含@Component
@PostConstruct
标记一个方法,在构造函数执行后执行
@PreDestroy
标记一个方法,在类销毁前执行
@Autowired
用于依赖注入,有字段注入,构造器注入,set方法注入三种方式
@Test
测试方法
@ContextConfiguration(classes=xxx.class)
可以传入参数设置一个组件配置类
@SpringBootTest
标记一个测试程序
@RestContrller
标记一个Rest控制器,可以把返回对象打包成json返回
...
