Golang
Golang概述Go的优势
极其简单的部署方式
可以直接编译成机器码
不依赖其他库
可直接运行即可部署
静态语言
编译的时候检查出来大多数问题
语言层面的并发
天生基因支持,
充分的运用多核
强大的标准库
runtime系统调度机制
高效的GC垃圾回收
丰富的标准库
简单易学
25个关键字
支持内嵌C语言
面向对象语言
跨平台
HelloGolanggo的语法是和python比较像的
123456789101112131415package main //当前程序的包名//可以这样导包import ( "fmt" "time")// main函数func main() { //函数的大{一定与函数名是在一行的,不然报错 //打印语句 fmt.Print("hello go") //不用分号 time.Sleep(1 * time.Second)}
golang变量声明的四种方式123456789101112131415161718192021222324252627pack ...
ElasticSearch
ElasticSearch什么是ElasticSearchElasticsearch 是位于 Elastic Stack 中心的分布式搜索和分析引擎。Logstach 和 Beats 促进采集、合计以及充实你的数据并在 Elasticsearch 中存储它们。Kibana 允许你去交互式的探索、可视化和共享对数据的见解,以及监视这个栈(Elastic Stack)。Elasticsearch 是索引、搜索和分析的神奇所在。
Elasticsearch 为各种数据类型提供接近实时的搜索和分析。不论你有结构化或非结构化的文本、数字数据,还是地理空间数据,Elasticsearch 能以支持快速搜索的方式高效地存储和索引它。你可以远超简单数据检索和聚合信息的方式去发现你数据中的趋势和模式。而且,随着你数据和查询量的增长,Elasticsearch 分布式的特性允许你的部署能随着它无缝地增长匹配。
虽然不是每个问题都是搜索问题,但 Elasticsearch 在大量实例中提供了处理数据的速度和灵活性:
为应用或者网站添加搜索框
存储和分析日志、度量和安全事件数据
使用机器学习,实时自动建模你 ...
Kafka
Kafka定义Kafka传统定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Quque),主要应用于大数据实时处理领域。
发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息。
Kafka最新定义:Kafka是一个开源的分布式事件流平台( Event StreamingPlatform),被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。
传统消息队列的应用场景传统的消息队列的主要应用场景包括:缓存/消峰、解耦和异步通信。
kafka基础架构
为方便扩展,并提高吞吐量,一个topic分为多个partition
.配合分区的设计,提出消费者组的概念,组内每个消费者并行消费
为提高可用性,为每个partition增加若干副本,类似NameNode HA
Zookeeper中记录谁是leader,kafka2.8后 可配置不采用ZK
ZooKeeper在Kafka中的作用
存储记录存储上下限的信息与每个分区下的leader副本
Netty
Netty什么是Netty
Netty是由JBOSS提供的一个Java开源框架,现为Github上的独立项目。
Netty是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络lo程序。
Netty主要针对在TCP协议下,面向Clients端的高并发应用,或者Peer-to-Peer场景下的大量数据持续传输的应用。
Netty本质是一个NIo框架,适用于服务器通讯相关的多种应用场景
要透彻理解Netty ,需要先学习NIO,这样我们才能阅读Netty 的源码。
Netty的应用场景
互联网行业:在分布式系统中,各个节点之间需要远程服务调用,高性能的RPC框架必不可少,Netty作为异步高性能的通信框架,往往作为基础通信组件被这些RPC框架使用。
典型的应用有:阿里分布式服务框架Dubbo 的RPC框架使用Dubbo协议进行节点间通信,Dubbo协议默认使用Netty 作为基础通信组件,用于实现各进程节点之间的内部通信
无论是手游服务端还是大型的网络游戏,Java语言得到了越来越广泛的应用
Netty作为高性能的基础通信组件,提供了TCP/U ...
数据结构与算法
数据结构与算法数组在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识
因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来,例如:
知道了数组的数据起始地址BaseAddress,就可以由公式BaseAddress+i * size十算出索引i元素的地址·
i即索引,在Java、c等语言都是从0开始
size是每个元素占用字节,例如int 占4, double 占8
空间占用Java中数组结构为
8字节 markword
4字节class指针(压缩class指针的情况)
4字节数组大小(决定了数组最大容量是232)
·数组元素+对齐字节(java中所有对象大小都是8字节的整数倍12,不足的要用对齐字节补足)
二维数组的内存图为
二维数组占32个字节,其中 array[0], array[1], array[2]三个元素分别保存了指向三个一维数组的引用
三个一维数组各占40个字节
它们在内层布局上是连续的
链表在计算机科学中,链表是数据元素的线性集合,其每个元素都指向下一个元素,元素存储上并不连续
单向 ...
JUC
JUC1、进程与线程进程与线程的概念进程
程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的
当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。
进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360安全卫士等)
线程
一个进程之内可以分为一到多个线程。
一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给CPU执行
Java中,线程作为最小调度单位,进程作为资源分配的最小单位。在windows中进程是不活动的只是作为线程的容器
二者区别
进程基本上相互独立的,而线程存在于进程内,是进程的一个子集进程拥有共享的资源,如内存空间等,供其内部的线程共享
进程间通信较为复杂
同一台计算机的进程通信称为IPC (Inter-process communication)
不同计算机之间的进程通信,需要通过网络,并遵守共同的协议,例如HTT ...
JVM
JVM1、简介什么是JVM?
Java Virtual Machine -java 程序的运行环境(java二进制字节码的运行环境)
优点
一次编写,到处执行
自动内存管理,垃圾回收功能
数组下标越界检查
多态
比较:
JVM JRE JDK的区别
学JVM有啥用:
面试(哈哈哈哈哈哈哈哈哈哈哈哈哈hhhhhhhhhhhhhhhhhhhhh)
理解底层的实现原理
中高级程序员的必备技能
学习路线
JVM架构模型Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。
具体来说:这两种架构之间的区别:·
基于栈式架构的特点
设计和实现更简单,适用于资源受限的系统;
避开了寄存器的分配难题:使用零地址指令方式分配。
指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现。
不需要硬件支持,可移植性更好,更好实现跨平台
基于寄存器架构的特点
典型的应用是x86的二进制指令集:比如传统的Pc以及Android的Davlik虚拟机。
指令集架构则完全依赖硬件,可移植性差性能优秀和执行更高 ...
MapStruct
MapStruct什么是MapStruct类似于BeanUtils.copyProperties(resource,target)的对象拷贝的工具
如何使用导入依赖
12345678<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> </dependency>
倘若我们想将Merchant类转化为merchantDTO类或MerchantDTO类转化成Merchant类则我们可以这样
此@Mapper注解是Mapstruct为我们提供的注解
12 ...
利用阿里云OSS实现文件流传输
利用阿里云OSS实现文件流传输首先在阿里云购买OSS服务并设置公共读,开启设置bucket后
我们可以在利用SpringBoot去实现文件流传输
首先要导包
12345<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>XX.XX.XX</version> </dependency>
配置好配置文件yaml
1234567sky: alioss: endpoint: 终端uri #oss-cn-beijing.aliyuncs.com access-key-id: 秘钥id access-key-secret: 你的秘钥 bucket-name: 你的Bucket名
定义工具类
1234567891011121314151617181920212223242 ...
JWT
JWT1、什么是JWTjsonwebtoken (JWT)是一个开放标准(rfc7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以JSON对象安全地传输信息。此信息可以验证和信任,因为它是数字签名的。jwt可以使用秘密(使用HNAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名
JWT简称JSON Web Token,也就是通过JSON形式作为Web应用中的令牌,用于在各方之间安全地将信息作为JSON对象传输。在数据传输过程中还可以完成数据加密、签名等相关处理。
2、JWT能做什么1、授权这是使用JWT的最常见方案。一旦用户登录,每个后续请求将包括JWT,从而允许用户访问该令牌允许的路由,服务和资源。单点登录是兰今广泛使用JWT的一项功能,因为它的开销很小并且可以在不同的域中轻松使用。
2、信息交换JSON Web Token是在各方之间安全地传输信息的好方法。因为可以对JWT进行签名《例如,使用公钥/私钥对)),所以您可以确保发件人是他们所说的人。此外,由于签名是使用标头和有效负载计算的,因此您还可以验证内容是否遭到篡改。
3、为什么要使用JWT ...