能力说明:
掌握封装、继承和多态设计Java类的方法,能够设计较复杂的Java类结构;能够使用泛型与集合的概念与方法,创建泛型类,使用ArrayList,TreeSet,TreeMap等对象掌握Java I/O原理从控制台读取和写入数据,能够使用BufferedReader,BufferedWriter文件创建输出、输入对象。
暂时未有相关云产品技术能力~
Github 千星项目创建者,InfoQ、掘金等平台优质作者
Just-In-Time or JIT 是指在程序运行时进行代码编译的技术,像 Java,Python(这里指PyPy)、LuaJIT 都引入了这种技术。
常见的高级语言都有自己的 Garbage Collection(GC)机制来管理程序运行的内存,例如 Java、Go 等。而 Rust 引入了一种全新的内存管理机制,就是 ownership(所有权)。它在编译时就能够保证内存安全,而不需要 GC 来进行运行时的内存回收。
OpenResty 一个基于 Nginx 的高性能 Web 平台,能够方便地搭建处理超高并发的动态 Web 应用、 Web 服务和动态网关。例如有名的 Kong 网关和国产新秀 ApiSIX 网关都是基于 OpenResty 来进行打造的。 OpenResty 通过实现 ngx_lua 和 stream_lua 等 Nginx 模块,把 Lua/LuaJIT 完美地整合进了 Nginx,从而让我们能够在 Nginx 内部里嵌入 Lua 脚本,用 Lua 语言来实现复杂的 HTTP/TCP/UDP 业务逻辑,同时依然保持着高度的并发服务能力。
Manim 是一个用于精确编程动画的引擎,专为创建解释性数学视频而设计。 注意,有两个主要版本的 manim。该存储库最初是 3Blue1Brown 的作者的个人项目,目的是为这些视频制作动画,此处提供了视频专用代码。2020 年,一群开发人员将其分叉成现在的社区版,目标是更稳定、更好地测试、更快地响应社区贡献,以及更友好地开始使用。
Redis 协议模型就是简单的请求-响应模型,和平常的 Http 协议有点类似。客户端发送 Redis 命令,然后服务端处理命令并返回结果给客户端。Redis 官方说这可能是最简单的网络协议模型了。
我们平常使用数据库的场景一般是程序里面代码直接连接使用,然后进行 CRUD 操作。或者使用有 GUI 界面的数据库软件来手动操作数据库, 这类软件有 DataGrip、Navicat等等...。平常很少关心它们的底层数据交互是怎么样的,相信你看了这篇文章一定能有大概的了解。本篇文章的代码使用 Go 语言来实现 MySQL 的协议。
逃逸分析技术的日渐成熟,促使所有的Java对象实例不一定都在Java堆上分配内存 简单来讲就是,Java Hotspot 虚拟机可以分析新创建对象的使用范围,并决定是否在 Java 堆上分配内存的一项技术。
线程私有 唯一一个没有规定 OutOfMemoryError 异常 的区域 它可以看作是当前线程所执行的字节码的行号指示器 如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是本地(Native)方法,这个计数器值则应为空(Undefined)
Java 四种引用方法使用和对比
垃圾收集算法可以划分为“引用计数式垃圾收集”(Reference Counting GC)和“追踪式垃圾收集”(Tracing GC)两大类,这两类也常被称作“直接垃圾收集”和“间接垃圾收集”。
平时在用springBoot的使用,常常会用到@Service,@Compent等等注解,简化了我们的开发流程,提升了开发效率.那如何自己来写一个注解呢?下面就来介绍一下。
Json-Schema 是一个用来验证、描述 Json 数据的一个标准,它可以用来验证你的请求数据是否和你定义的 Schema 是否一致。
在 5.0 版本以前,它的名字是叫 Aviator ,定位一直只是一个表达式引擎,不支持 if/else 条件语句(仅有三元运算符支持 ?: ),没有内置的 for/while 循环支持(虽然你可以用 seq 库类似函数式的方式来处理集合),也没有赋值(后来在 4.0 引入),没有作用域的概念(也在 4.0 引入 lambda 函数后部分实现)等等一般语言常见的能力。在 5.0 版本后,它变成了一门脚本语言,叫:AviatorScript 。
对于数组类而言,情况就有所不同,数组类本身不通过类加载器创建,它是由Java虚拟机直接在内存中动态构造出来的。
我们可以去 ZooKeeper 官网 下载,这里我下载了 ZooKeeper 3.7.0 版本 下载解压后,进入 apache-zookeeper-3.7.0-bin/bin 目录,这里有客户端、服务端和一些工具。在 Windows 中可以执行.cmd 结尾的执行文件,在 Mac 或 Linux 中可以执行 .sh 结尾的可执行文件。名为 zkCli 的文件就是 ZooKeeper 的客户端了,我们可以用这个客户端来连接到 ZooKeeper 注册中心,来对节点进行查看或增删操作。
构建的时间比较长,构建完成后就会在 ./target 目录下生成一个二进制执行文件,一般名字是 quarkus-demo-1.0-runner,直接执行这个二进制文件就可以运行项目了。
我这边使用的是 Maven 3.8.1 版本,可以使用 Quarkus 官方提供的 io.quarkus:quarkus-maven-plugin:2.0.1.Final 插件来快速穿件 Quarkus 项目。
Quarkus 可以从多个地方获取项目的配置,它读取配置优先级入下图,在下面的优先级中,一旦读取到某个配置,就不会再继续读取后面配置中的这个配置了。
小白学前端之TypeScript的逻辑判断
和 Java 一样,TypeScript 的接口也是用关键字 interface 来声明的
联合类型(Union Types)可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。
这里用 npm 工具安装 TypeSctipt
官方介绍:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
在 Java 中表示继承关系,空心箭头指向父类
最近在看阿里的SDK的时候,突然看到了一个好玩的东西,这玩意叫 Darabonba。是一种 OpenAPI 应用的领域特定语言。可以利用它为任意风格的接口生成多语言的 SDK、代码示例、测试用例、接口编排等。现在阿里云的多语言 SDK 就是用这个生成的。下面是官方的介绍流程图。
HTTP 协议不用我多说了吧,大家都知道,现在我 web 开发一般都是使用 HTTP 协议来进行通信的。到目前为止,HTTP 进行了几次版本更新,HTTP 1.1 就是表示HTTP 的 1.1 版本。1.1 版本也是目前大部分网站所用的版本。
当前 Dubbo 版本注册粒度是以接口粒度来注册的,而 SpringBoot 是以服务为粒度来注册的。而且 Dubbo 有自己的注册中心(当然 Spring Cloud Alibaba Dubbo 的注册中心可以挂靠在 Spring 上)。所以当一个项目既要调用 Dubbo 服务,又要提供自己的 Web 接口给网关调用时,就要为该项目设置两个注册中心,一个 Dubbo,一个 SpringBoot的(当然可以注册到同一个注册中心上)。
网关作为一个主要的外部流量入口,其重启的次数当然是越少越好,所以不能有时候为了修改一个路由就重启整个网关服务,这样的话网关就不是一个高可用的网关。当然,有时候要新增或修改代码层面的自定义的过滤器时还是要重启网关的,所以我们能做的就是尽可能减少不必要的重启。这里就可以引入阿里巴巴开源的 Nacos 了。
我们可以去 [Spring initializer](https://start.spring.io) 网站或者用 IDEA 来快速创建出一个 Spring Cloud Gateway 项目。
AES(Advanced Encryption Standard)的中文名叫高级加密标准,又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于 2001 年 11 月 26 日发布于 FIPS PUB 197,并在 2002 年 5 月 26 日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。
密码分组链接模式 CBC (Cipher Block Chaining),这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。
与 C 系列中的所有语言一样,Go 中的所有内容都按值传递。也就是说,一个函数总是获得所传递事物的副本,就像有一个赋值语句将值分配给参数一样。例如,将int值传递给函数将生成的副本int,而将指针传递将生成指针的副本,但不会复制其指向的数据。
在go中有一个类似switch的关键字,那就是select。 select的每个case接收的是I/O通讯操作,不能有其他表达式。select要配合channel使用。
在每个goroutine也有一个指针指向_panic链表表头,然后每增加一个panic就会在链表头部加入一个_panic结构体。当所有的defer执行完后,_panic链表就会从尾部开始打印panic信息了,也就是说先发生的panic先打印信息。
panic:一旦出现,就意味着程序的结束并退出。Go 语言中 panic 关键字主要用于主动抛出异常,类似 java 等语言中的 throw 关键字。 recover:将程序状态从严重的错误中恢复到正常状态。Go 语言中 recover 关键字主要用于捕获异常,让程序回到正常状态,类似 java 等语言中的 try ... catch 。
go结构体的结构体主要由type和struct两个关键字组成
在go1.14中,官方又对defer做了升级,据说这次升级把速度提升了一个量级。
make只可以用来创建map,slice,chan这三个类型,而且它是直接返回类型本身。
map基本使用及指针问题|Go主题月
众所周知,Docker是用go进行开发的,所以自然Docker官方也开放了go的Docker API库。所以我们可以简单的调用Docker API来对Docker进行二次开发,下面就做个简单的示例,使用go来查看本地的容器,和启动一个容器。
为什么go能支持高并发,它和Java的多线程有什么不同? 常规的多线程是由CPU直接调度的,其中大部分时间花在了上下文切换上面,所以后面就了了协程(co-routine),用于减少上下文切换。
指针的两个关键符号 *:返回所引用变量内存地址上的值 &:返回变量的内存地址
首先在项目下建立一个static文件夹(当然名字随意命名,没有规定),然后在下面创建几个文件,分别在文件里填入我是s1/s2/s3文件里的具体如下目录结构
embed是go 1.16新引入的包,能够把静态文件和go文件一起编译成二进制文件。使我们能够更好的进行web的开发。没有这个包之前我们一般用go-bindata或go-bindata-assetfs先把静态文件编译成go文件,然后再用go命令编译成二进制文件,过程比较繁琐。现在官方提供了embed这个包后,可以直接通过一行命令(//go:embed)来导入静态文件,然后go命令编译时会把导入的静态文件也一起编译成二进制文件。
io包提供了系统io最基本的封装,可以用来进行文件的读取,写入,复制等功能。不是线程安全的。
net/smtp包
钉钉机器人 go库 github地址:github.com/greycodee/d… 钉钉官方文档
上篇文章说LinkedList也可以实现队列和栈的功能,但是我们一般要用队列功能的话推荐使用ArrayDeque,因为他底层是数组,而队列和栈都是只要操作头部或尾部,所以这样的话数组的性能就比链表快一点。 LinkedList和ArrayDeque都是通过实现了Deque这个接口来获得队列和栈的功能。而Deque这个接口通过继承Queue这个接口来取得队列功能,然后在这个基础进行扩展,实现了双端队列,由此可以获得栈的功能。为了空间能得到充分利用,ArrayDeque使用了循环队列;还有LinkedList可以插入null值,而ArrayDeque是不能插入null的。