Skip to content

Instantly share code, notes, and snippets.

Chrome测试,Wireshark抓 curl、okhttp3、chrome的包
@startuml state-sample
' 下面一行代码引入新样式,在线查看效果 https://www.plantuml.com/plantuml/svg/RP8_Ry8m4CLtVuhhKgIg8KidXeeAqJ8WG1IfGrLLRd8a5ewTdkrI-kbxIO24FvlztldtpcSFdPVaGw615nuZ9ujIexXH9j4XnK0QSkzBDuXZajj-fdmUle93IgpnQ7m_iKNy6wJPOLngQIfKvFnEOvGyn8Lq7YbEB66_P4Vq81W-KV19y3d2scfjjyfae9L1a2Q54rkHuvK5JWHj4wdrJlGEpK7B5I_ByNZs-RHSpj-4yCfhXCbgjO0bVWTanaAIgs9Ugriw8TxlFY2A7W_-bDE5w6nWK1zfA6S6xPbLooTM1PoWJ94Sbyqt5-QOo19RprBfG9pOLdVIMZ5lLaUb3h0SNTExwYMvAHlbc6mWvyr1QPYW79I4ZYVT61LaYYRpETVCh8Sa3sQ3QUkE6g66dbaNwKTIaw_MzT0KONhVUZzIgnHkmQa_FAZNQ5UiiU4tti7AMfXAoavgggUjvoFQZZlJRSNwXljv7ELh3NIzbZv4a_BV-mS0
!includeurl https://raw.githubusercontent.com/xuanye/plantuml-style-c4/master/core.puml
' uncomment the following line and comment the first to use locally
'!include core.puml
GREEN_ARROW
title HTTP Request Parsing States
@liufor
liufor / reflect_CanAddr_CanSet.go
Created April 17, 2019 04:53
*int 不一定是addressable的,int不一定是不可addressable的
package main
import (
"reflect"
"fmt"
)
func main() {
x := 42
@liufor
liufor / ByteBuddyDemo.java
Created April 16, 2019 04:56
intrinsic function在JIT后生效,准确来讲是具体的编译器编译后才能生效(比如C2有效,C1编译无效)
package com.liufor.javaagent;
import net.bytebuddy.agent.ByteBuddyAgent;
import net.bytebuddy.agent.builder.AgentBuilder;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.implementation.FixedValue;
import net.bytebuddy.utility.JavaModule;
import static net.bytebuddy.matcher.ElementMatchers.named;
@liufor
liufor / run.log
Created April 9, 2019 15:53
%p 打印出的是slice指向的数组的第一个元素的地址,并不是本slice自身的地址
slice append 前后的地址是一样的,那slice的不变性怎样实现的呢?
0xc000098020,0xc000098020
%p on slice 只能取到slice backen array的第0个元素地址,并不是slice自己的address
ref:https://golang.org/pkg/fmt/ (%p address of 0th element in base 16 notation, with leading 0x)
4个地址相同
address:0xc0000a6000 = 0xc0000a6000 =0xc0000a6000 = 0xc0000a6000
&sli 才能取到slice本身的地址
%p,&slice is address of slice self
@liufor
liufor / convert_hex_to_bit.go
Last active July 25, 2019 03:31
Go: 16进制字符串呈现 -> 2进制字符串呈现
package main
import (
"fmt"
"encoding/hex"
"strconv"
)
//单个Hex转为bit string.
func HexToBin(hex string) (string, error) {
@liufor
liufor / gracefullShutdown.go
Created April 5, 2019 03:39
Golang退出前做一些资源清理工作.
package main
import (
"log"
"os"
"os/signal"
"syscall"
)
func AddShutdownHook(hooks ...func()) {
package main
import (
"fmt"
"reflect"
)
func describe(x interface{}) {
fmt.Printf("%v,%T\n", x, x)
}
@liufor
liufor / channels_waitgroup_pointer_indirection.go
Created March 30, 2019 05:41
sync.WaitGroup 和 j.u.c.CountDownLatch对应. 1.WaitGroup强在可以随时Add信号量,CountDownLatch只能初始化设置一次。 2.CountDownLatch.await()方法有一个timeout的重载,WaitGroup不支持 3.Method receiver 定义时区分 value 还是 pointer,当然只能定义一个,但调用时不区分,会被Go编译器自动适配为定义时的类型. 大白话来说是:Pointer receiver时,可以在value上调用,其实是被Go编译器转为 (&value).invoke(arg) 了。Value receiver时,可以在Pointer调用,其实是被Go编译器转为(*pointer).inv…
package main
import (
"fmt"
"sync"
"time"
)
var start time.Time
@liufor
liufor / sleep.go
Created March 30, 2019 01:53
Golang time.Sleep 是以纳秒为单位。 time.Sleep 原理:https://github.com/golang/go/issues/25471
package main
import (
"time"
)
func main() {
//go doc time.Duration
time.Sleep(1000 * 1000 * 1000 * 2) //2s, 默认是, 默认是纳秒ns, type Duration int64
time.Sleep(2 * time.Second) //2s