自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(143)
  • 资源 (1)
  • 收藏
  • 关注

原创 Golang sync.Mutex 和 WaitGroup 的使用案例

sync.Mutex为互斥锁(也叫全局锁),Lock()加锁,Unlock()解锁。sync.WaitGroup,创建一个任务,sw.Add(1),加一;任务完成的时候使用sw.Done()来将任务减一;使用sw.Wait()来阻塞等待所有任务完成。package mainimport ( "fmt" "sync")var ( s = 0 syn = sync.Mutex{} sw = sync.WaitGroup{})func main(){ fo...

2020-06-28 13:06:41 691

原创 Golang JSON-反序列化map,切片(slice),结构体(struct)

package mainimport ( "encoding/json" "fmt")/*{"addr":"beijing","age":123,"name":"typ"}{"name":"qqqq","age":12,"hobbit":"ttttt"}[{"addr":"beijing111","age":1231,"name":"typ111"},{"addr":"beijing222","age":1222,"name":"typ222"}]*/type student str.

2020-06-21 17:43:36 3971

原创 Golang JSON-序列化map,切片(slice),结构体(struct)

package mainimport ( "encoding/json" "fmt")func mapJson() { testMap := make(map[string]interface{}) testMap["name"] = "typ" testMap["age"] = 123 testMap["addr"] = "beijing" json01, err := json.Marshal(testMap) if err != nil { fmt.Println("j.

2020-06-21 17:29:05 1195

原创 Golang map切片和map的排序

package mainimport ( "fmt" "sort")func main() { mapSlice := make([]map[string]string,2) mapSlice[0] = make(map[string]string) mapSlice[0]["name"] = "tom" mapSlice[0]["age"] = "20" mapSlice[1] = make(map[string]string) mapSlice[1]["name"] = .

2020-06-19 19:00:07 755

原创 Golang map进行操作,遍历

package mainimport "fmt"func main() { //map 操作 city := make(map[string]string) //赋值 --增加-更新 city["beijing"] = "北京" city["shanghai"] = "上海" city["shenzhen"] = "深圳" fmt.Println(city) //map[beijing:北京 shanghai:上海 shenzhen:深圳] //更新 city["beijin.

2020-06-19 18:33:30 1490

原创 Golang 切片使用

package mainimport ( "fmt")func main() { //切片的创建方式一: var arr [6]int = [6]int{1,2,3,4,5,6} var sli1 = arr[0:4] fmt.Println("arr: ",arr) fmt.Println("sli1: ",sli1) fmt.Println("sli1: ",len(sli1)) fmt.Println("sli1: ",cap(sli1)) //方式二: ints.

2020-06-19 17:59:16 173

原创 Golang time 时间常量

var a = 1 for { a++ fmt.Println(a) time.Sleep(time.Millisecond * 100) if a > 50 { break } } fmt.Println(now.Unix()) fmt.Println(now.UnixNano())

2020-06-18 19:47:21 819

原创 Golang 获取时间格式化

package mainimport ( "fmt" "time")func main(){ now := time.Now() fmt.Printf("%T %v",now,now) fmt.Println() fmt.Printf("年:%v 、",now.Year()) fmt.Printf("月:%v 、",int(now.Month())) fmt.Printf("月:%v 、",now.Month()) fmt.Printf("日:%v 、",now.Day()).

2020-06-18 19:31:59 1412

原创 Golang strconv和strings 常用方法

package mainimport ( "fmt" "strings" "strconv")func main() { //1).长度 var str01 string = "hello" fmt.Println("str01长度: ",len(str01)) //5 fmt.Println("str01长度: ",len("world 哈哈")) //12 汉字3个字节 //2).字符串遍历 var str02 = "hello 中国" //有乱码--》h e .

2020-06-18 18:55:16 350

原创 Golang defer使用

defer会把值拷贝,下面值的变化不会影响defer中的值package mainimport ( "fmt")func testK(n1 int, n2 int) int{ //defer 在testK完成之后执行 defer fmt.Println("n1: ",n1) defer fmt.Println("n2: ",n2) n1 += 2 n2 += 3 fmt.Println("n1 + n2",n1+n2) return n1 + n2}func .

2020-06-18 16:59:10 182

原创 Golang 闭包实现

package mainimport ( "fmt" "strings")func AddIt() func (int) int { var a = 10 return func(x int) int { a = a + x return a }}//strings.HasSuffix(name,suff)//判断name是否是suff的后缀//如果是,返回name---否则返回name + 后缀func makeSu(suff string) func (stri.

2020-06-18 16:36:42 214

原创 Golang 匿名函数使用方式--三种

package mainimport ( "fmt")//全局匿名函数var ( Func1 = func(a int, b int) int { return a * b })func main(){ //匿名函数方式一 res1 := func (a int, b int) int { return a + b }(3,4) fmt.Println("res1: ",res1) //匿名函数使用二 res2 := func (a int ,b int) .

2020-06-18 16:05:19 493

原创 Golang 函数、数据类型的别名

package mainimport ( "fmt")//复杂func tet(func1 func(int,int) int, num1 int, num2 int) int{ return func1(num1,num2)}//函数别名 funcTestTypetype funcTestType func(int,int) int//简单方法func tet2(func1 funcTestType, num1 int, num2 int) int{ return func.

2020-06-18 12:42:50 1553

原创 Golang 遍历 有中文

package mainimport ( "fmt")func main(){ var str string = "hello world!背景" str1 := []rune(str) for i:=0; i<len(str1); i++ { fmt.Printf("%c\n",str1[i]) }} for index, val := range str { fmt.Printf("%d, %c\n",index,val) // ..

2020-06-17 17:21:57 320

原创 golang 交换两个变量的值,不允许有中间变量

package mainimport ( "fmt" _"unsafe")func main(){ //交换两个变量的值,不允许有中间变量 var a int = 100 var b int = 200 a = a + b //替换 a 为 a + b // (b = a - b) ==>(b = a + b - b) ==> (b = a) b = a - b //替换 a = a + b 替换上面b 也就是 a // (a = a - b) ==&.

2020-06-17 10:40:20 352

原创 Redis 性能测试工具(redis-benchmark)

测试每个命令的性能:-h 指定服务器主机名 127.0.0.1-p 指定服务器端口 6379-s 指定服务器 socket -c 指定并发连接数 50-n 指定请求数 10000-d 以字节的形式指定 SET/GET 值的数据大小 2-k 1=keep alive 0=reconnect 1-r SET/GET/INCR 使用随机 key, SADD 使用随机值 -P 通过管道传输 <numreq> 请求 1-q 强制退出 redis。仅显示 query/sec 值

2020-05-30 12:45:26 358

原创 Java-有空值(NULL) JSONArray按字段排序(空值在最后)

JSONArray jsonArray = new JSONArray(); JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("testField",4.12); JSONObject jsonObject2 = new JSONObject(); ...

2020-01-13 16:07:37 1075

原创 Java-有空值(NULL) List 对象按字段排序(空值在最后)

List<Car> catList = new ArrayList<>(); //加入4个对象 Car car1 = new Car(); car1.setTestFiled(1.02); Car car2 = new Car(); car2.setTestFiled(null...

2020-01-13 16:03:43 9780 4

原创 ZUUL---Load balancer does not have available server for client: provide

它说的是找不到 provide,看一下自己 ZUUL 配置文件:(这个一定要配对)对应你服务提供者的spring.application.name=provide-str

2019-09-21 09:46:26 886

原创 SpringBoot 整合 RabbitMQ 测试发送接收消息

前提:安装好RabbitMQ,配置Exchanges---Queues引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifac...

2019-09-07 10:07:01 613

原创 RabbitMQ 三种 Exchange 模式——订阅、路由、通配符模式

订阅、路由、通配符模式,三种模式都是用了Exchange交换机,消息没有直接发送到队列,而是发送到了交换机,经过队列绑定交换机到达队列。一、订阅模式(Fanout Exchange):一个生产者,多个消费者,每一个消费者都有自己的一个队列,生产者没有将消息直接发送到队列,而是发送到了交换机,每个队列绑定交换机,生产者发送的消息经过交换机,到达队列,实现一个消息被多个消费者获取的目的...

2019-09-07 08:27:28 311

原创 Docker RabbitMQ安装测试

前提:docker安装完成拉镜像:(带管理界面的镜像 “-management”)docker pull rabbitmq:3-management查看拉的镜像:docker images运行:docker run -d -p 5672:5672 -p 15672:15672 --name (你想要指定的名称) (上面的镜像ID)示例:dock...

2019-09-07 07:52:44 181

原创 SpringBoot配置文件占位符

application.properties${testDefault:defaultValue}:默认值--》defaultValue#personperson.name=詹金斯${random.uuid}person.age=${random.int}person.birth=2019/01/01person.stage=trueperson.maps.name=ja...

2019-08-25 14:07:55 614

原创 @Configuration + @Bean 给容器中添加组件

SpringBoot 推荐给容器中添加组件的方式,推荐使用全注解的方式1、配置类@Configuration------>相当于 Spring 的配置文件2、使用@Bean给容器中添加组----相当于原来的 <bean id="testService" class="com.it.xxxxxx"></bean>增加一个空的 service 用...

2019-08-25 13:52:53 302

原创 @PropertySource 代码解释

@PropertySource:加载指定的配置文件Person.javaimport org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.PropertySource;import org.springf...

2019-08-25 13:37:11 603

原创 SpringBoot 配置 yaml,properties 配置文件值获取(数组,对象,Map)以及 properties 配置文件打印中文乱码问题解决

将配置文件中配置的每一个属性的值,映射到这个组件中 @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定; prefix = "person":配置文件中哪个下面的所有属性进行一一映射 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能Person:package ...

2019-08-24 13:34:13 5070

原创 SpringBoot 打成 jar 包部署(IntelliJ IDEA )

在项目的target目录下生成 jar 包可以直接拷贝到任何位置运行 java -jar springboot.jar(jar包名)

2019-08-23 22:01:18 141

原创 Java8新特性 概述

为什么要用哈希表,--一万个元素一万次equals,效率低hashmap底层是数组,每个数组都是entry,为什么要用hash表?哈希表好处--默认16,存入的术后调用对象的hashcode,用hash算法对hashcode进行运算,计算出来的就是数组的索引值,找到对应的位置,看看这个位置上面有没有对象在,如果没有,直接添加。如果当前位置有对象在,进行equals比较,如果一样,value进...

2019-08-22 21:43:56 155

原创 Lambda表达式练习与总结

1.无参数,无返回值* () -> System.out.println("Hello Lambda!");2.有一个参数,并且无返回值* (x) -> System.out.println(x)3.若只有一个参数,小括号可以省略不写* x -> System.out.println(x)4.有两个以上的参...

2019-08-22 21:39:58 268

原创 CAS的ABA问题以及解决方法(AtomicStampedReference)

CAS会导致“ABA问题”。如果一个变量V初次读取的时候是A值,并且在准备赋值的时候检查到它仍然是A值,那我们就能说明它的值没有被其他线程修改过了吗?很明显是不能的,因为在这段时间它的值可能被改为其他值,然后又改回A,那CAS操作就会误认为它从来没有被修改过。这个问题被称为CAS操作的"ABA"问题。尽管线程one的CAS操作成功,但是不代表这个过程就是没问题的。程序:线程A,...

2019-08-17 15:09:53 230

原创 CAS原理(源码例子解析)

通过Unsafe保证原子性Unsafe 是CAS的核心类,由于Java方法无法直接访问底层系统,需要通过本地(native)方法来访问,基于该类可以直接操作特定内存的数据。(注意Unsafe类中的所有方法都是native修饰的,也就是说Unsafe类中的方法都直接调用操作系统底层资源执行相应任务) 变量valueOffset,表示该变量在内存中的偏移地址,因为Unsafe就是根据内存偏...

2019-08-17 06:54:36 255

原创 volatile禁止指令重排理解和例子说明

计算机在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排,一般分一下3种:源代码 -> 编译器优化的重排 -> 指令并行的重排 -> 内存系统的重排 -> 最终执行的指令单线程环境里面确保程序最终执行结果和代码顺序执行的结果一致。(单线程没有影响) 处理器在进行重排序时必须考虑指令之间的数据依赖性。(int a=1; int b=0; 没有依赖,...

2019-08-17 06:35:00 2122 4

原创 volatile不保证原子性代码验证

什么叫原子性?保证数据的完整,一致性,不可分割。一个线程的操作中间不能被分隔,不能被其他线程覆盖。i++ 的原子性问题:i++ 的操作实际上分为三个步骤“读-改-写”从变量i中读取读取i的值->值+1 ->将+1后的值写回i中程序:有20个线程,每个线程执行1000次number++public class VolatileTest { pu...

2019-08-11 18:15:57 213

原创 volatile 可见性代码验证

volatile保证可见性,什么是可见性?程序:让A线程修改number变量,在main线程用while一直循环,直到A线程修改,然后打印 “main线程结束” 结束程序。public class VolatileTest { public static void main(String[] args) { MyTest myTest = new ...

2019-08-11 17:43:03 302 1

原创 模拟CAS算法 (打印看结果)

程序:十个线程去设置值结果:有的成功有的失败举例:①int expectedValue = compareAndSwap.get();②boolean b = compareAndSwap.compareAndSet(expectedValue, (int) (Math.random() * 100));A线程执行 ①获取到了 0,然后B线程获...

2019-08-09 08:42:44 324

原创 AtomicInteger原子变量与CAS算法

-------->CAS原理i++ 的原子性问题:i++ 的操作实际上分为三个步骤“读-改-写”从变量i中读取读取i的值->值+1 ->将+1后的值写回i中程序:开启10个线程,打印 serialNumber结果:在多次执行情况下,可能出现尽管serialNumber加上了valotile,因为volatile无法保证原子性,所以程序(...

2019-08-08 08:24:43 146

原创 volatile 可见性

volatile 关键字:当多个线程进行操作共享数据时,可以保证内存中的数据可见。 相较于 synchronized 是一种较为轻量级的同步策略。volatile修饰的变量在被一个线程修改后,会被强制立即刷新到主存(可见性),其他线程如果有该变量的缓存行,会被设置为无效。程序:ThreadDemo线程更改flag为true,在ma...

2019-08-07 08:25:11 214

原创 IDEA 创建动态WEB项目并Tomcat部署

File-->New-->Project...点击RUN-->EditConfigurations...发现控制台里面有中文乱码解决-Dfile.encoding=UTF-8

2019-08-04 09:59:27 472

原创 WARNING: IPv4 forwarding is disabled. Networking will not work

https://blog.csdn.net/yjk13703623757/article/details/68939183

2019-07-29 17:06:02 121

原创 Push failed: Failed with error: Could not read from remote repository

2019-07-29 17:03:18 158

java 编程思想 中文

java 编程思想 中文 机械工业出版社出版的图书,作者是埃克尔,译者是陈昊鹏。

2018-08-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除