wechat

来,重新认识一个强大的 Gson!

两盒软妹~` 提交于 2020-08-04 19:09:55
_作者:Mafly cnblogs.com/mafly/p/gson.html 从一个 Bug 说起 不知道你们发现没有,你写完的程序无论当时怎么测试,过一段时间总会出 Bug 。再说一个每天都在发生的例子:在你写完一篇博客后,立即检查的话,总是查不出自己写的错别字。 据说这些都包含有一些大脑对当下事物处理的逻辑在里边,而且还有心理学因素在里边,我也不懂。反正现在就是程序出 Bug 了!出 Bug 了!! Bug !!! 事情是这样的,客户端请求服务器开放接口时,我们是以 JSON 字符串的形式返回的,这时候本来正常返回形式是这样: { "name": "mafly", "age": "18", "sex": "男" } 但这个名字叫 Mafly 的人他不想让你知道他是男是女。就没填性别,程序中默认赋值为 null 了,JSON 序列化时就发生了意想不到的事儿。推荐: JSON是什么,为什么这么流行? 重现一下那个 Bug 用于转换Java对象为 Json 字符串和把 Json 字符串转换为对象的工具类有很多,Gson、Jackson、FastJson等,我们用的是 Gson, 它是 Google 开发的,还据传说它的性能比较强大一些。嗯,对,我们用的就是这个。先看示例代码: public static void main(String[] args) { HashMap

23. 一篇文章 说清楚 Go语言里的函数

别说谁变了你拦得住时间么 提交于 2020-08-04 18:27:40
Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客: http://golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime 1. 关于函数 函数是基于功能或 逻辑进行封装的可复用的代码结构。将一段功能复杂、很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性。 在 Go 语言中,函数可以分为两种: 带有名字的普通函数 没有名字的匿名函数 由于 Go语言是编译型语言,所以函数编写的顺序是无关紧要的,它不像 Python 那样,函数在位置上需要定义在调用之前。 2. 函数的声明 函数的声明,使用 func 关键字,后面依次接 函数名 , 参数列表 , 返回值列表 , 用 {} 包裹的代码逻辑体 func 函数名(形式参数列表)(返回值列表){ 函数体 } 形式参数列表描述了函数的参数名以及参数类型,这些参数作为局部变量,其值由参数调用者提供 返回值列表描述了函数返回值的变量名以及类型,如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。 举个例子

转 mysql 巡检脚本

馋奶兔 提交于 2020-08-04 15:48:58
##感谢 TSMYK Java技术大杂烩 2019-06-29 https://mp.weixin.qq.com/s?__biz=MzU2NjAyNjk2Mw==&mid=2247483912&idx=1&sn=063f744d30d3ed224c6aca825cd1b11d&chksm=fcb3f5b4cbc47ca2a2f772f829f55ce84984af349596cf6743f22811c3db07cebd066c9526cc&mpshare=1&scene=1&srcid=0509lXoPjMLmJ4kJUrhWIcMs&sharer_sharetime=1588993909055&sharer_shareid=5482e59e5224e26ac6c8fa00ebf40ad9&exportkey=Acyhuhx431Ut8T%2BqAZUBUok%3D&pass_ticket=%2Bd9lGyiVOtq4fbLDesHhwF9U8TgRma%2Bjw2pOhoh3p2AgMGTwCW1rVipixHu7%2Fvx3#rd 前言 shell 中执行 mysql 命令 各项巡检命令 shell 脚本实现 前言 在系统运行的过程中,DBA需要经常的对数据库进行一些检查,如数据库磁盘的占用量,缓存的命中率,内存的分配等;由于有个客户需要对系统的数据库进行检查

五分钟科普:微信 PC 端多开的秘密

可紊 提交于 2020-08-04 12:20:23
微信电脑端也能多开 昨天,偶然从好朋友小林(微信公众号:小林Coding)处得知,他的电脑居然可以同时上两个微信号。 手机端多开微信我知道,像华为、小米等手机系统都对此做了支持,不过在运行Windows系统的电脑上怎么启动两个微信呢,这倒是一下引起了我的好奇。 小林告诉我他是这样做的,写了一个批处理: start D:\WeChat\WeChat.exe start D:\WeChat\WeChat.exe 然后直接双击批处理文件,就能启动两个微信进程。 我试了一下,果然如此! 随后我又加了一行,竟然还能启动3个: 接着我在网络上搜了一下,原来这一招早就被人用过了,看来是我火星了。不过到底为什么用这种方式就能多开,我倒是很想知道这个迷底。 TIPS:如果对技术分析部分不感兴趣,可以跳过直接来到后面的真相部分。 微信的单例模式 正常情况下,直接手动双击微信图标启动,后面启动的进程会进行全局单例模式检查,如果发现已经存在微信进程,就会直接把对应进程的微信窗口激活,定位到桌面最前面,随后自己退出。 但为什么用上面的方式就能启动俩呢?我们来一探究竟。 首先,分析一下上面描述的微信单个实例是如何实现的。 做过Windows平台应用程序开发的朋友可能对此比较熟悉,一般是进程启动后创建一个全局唯一名字的互斥体,创建成功则正常启动,创建失败则判断一下是否这个互斥体已经存在

关于 equals 和 hashCode,看这一篇真的够了!

╄→гoц情女王★ 提交于 2020-08-04 09:59:53
作者:CringKong https://blog.csdn.net/CringKong/article/details/89429269 这几天在尝试手撸一个类似 Lombok 的注解式代码生成工具,用过 Lombok 的小伙伴知道, Lombok 可以通过注解自动帮我们生产 equals() 和 hashCode() 方法,因此我也想实现这个功能, 但是随着工作的深入,我发现其实自己对于 equals() 和 hashCode() 的理解,也处在一个很低级的阶段。 因此痛定思痛,进行了一番深入学习,才敢来写这篇博客。 1、equals在Java中含义 首先要解释清楚这个, equals 方法在Java中代表逻辑上的相等 ,什么叫逻辑上的相等?这个就涉及到Java本身的语法特性。 我们知道, Java中存在着 == 来判断基本数据类型的相等,但是对于对象, == 只能判断内存地址是否相等,也就是说是否是同一个对象 : int a = 10000; int b = 10000; // 对于基本数据类型, == 可以判断逻辑上的相等 System.out.println(a == b); Integer objA = 10000; Integer objB = 10000; Integer objA1 = objA; // 对于类实例, == 只能判断是否为同一个实例

中兴新支点安装dockqq和dockwechat

五迷三道 提交于 2020-07-29 09:42:30
1、系统环境 看源中是fedora于是试试版本 [root@kvm-server ~]# cat /etc/redhat-release NewStart NSDL release V3.3.2 果真是基于fedora的,再看看源,是fedora25 2、安装docker源 dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo 3、安装docker dnf install docker-ce -y systemctl start docker 4添加用户组 usermod -aG docker USER 5直接使用脚本启动安装wechat curl -sL https://raw.githubusercontent.com/huan/docker-wechat/master/dochat.sh | bash 这个脚本我的机器不好用,自己写了一个 #!/usr/bin/env bash # # dochat.sh - Docker WeChat for Linux # set -eo pipefail # # Get the image version tag from the env # WECHAT_IMAGE_VERSION="bestwu/wechat"

实现一个“真”的网页

空扰寡人 提交于 2020-07-29 09:20:19
@一个“真”的网页 实现一个真的网页~ 经过了前几次的实验,相信大家已经对网页布局有了初步的了解,那么这一次就让我们来做个“真网页”吧! 复制代码 文章展示页是非常非常常见的东西,几乎是随处可见,布局可复杂也可以非常简单,其实归根到底, 一个文章布局无非就是文章标题的部分和文章的正文部分 。正文部分没有什么好讲的,主要是填充数据,但是标题的部分,可以做的文章就有很多了,可以添加分享按钮,可以添加 标签,时间,副标题,发布人作者 等等,根据项目实际需求增加删除相应的功能, 一、任务介绍: 高保真 的完成下图布局: 二、分析布局 首先要分析一下各个模块的布局 我们依旧使用的 盒子模型 。 首先先分为两个大盒子(红色边框) header 盒子和 content 盒子。 其中content中相对对来说比较简单,就需要添加需要的内容文字就好啦。 header相对于基本作业要复杂一些。 在header中首先要分为两个盒子(绿色边框)第一个盒子head装的是标题,下面的盒子info_box装了三个盒子。包括信息盒子info、评论盒子comment_box评论盒子、分享盒子share_box。 评论盒子comment_box中 分为 join div元素和 comment div元素 分享盒子share_box中 分为sina (微博)qqzone(qq空间)wechat(微信)

HashMap 容量为什么总是为 2 的次幂?

五迷三道 提交于 2020-07-29 08:52:32
作者:Helloworld先生 https;?/blog.csdn.net/u010841296/article/details/82832166 HashMap是根据key的hash值决策key放入到哪个桶(bucket)中,通过 tab=[(n - 1) & hash] 公式计算得出,其中tab是一个哈希表。 1. 为什么要保证 capacity 是2的次幂呢? 1)在get方法实现中,实际上是匹配链表中的 Node[] tab 中的数据。 (n - 1) & hash实际上是计算出 key 在 tab 中索引位置,当key的hash没有冲突时,key在HashMap存储的位置就是匹配的node中的第一个节点。如果hash有冲突,就会在node里面节点中查询,直至匹配到相等的key。 2)因为 n 永远是2的次幂,所以 n-1 通过 二进制表示,永远都是尾端以连续1的形式表示(00001111,00000011) 当(n - 1) 和 hash 做与运算时,会保留hash中 后 x 位的 1 例如 00001111 & 10000011 = 00000011 这样做有2个好处 &运算速度快,至少比%取模运算块 能保证 索引值 肯定在 capacity 中,不会超出数组长度 (n - 1) & hash,当n为2次幂时,会满足一个公式:(n - 1) & hash = hash

石头剪刀布人工智能代码详解

时光毁灭记忆、已成空白 提交于 2020-07-29 08:22:22
石头剪刀布人工智能代码详解 # include <iostream> # include <fstream> # include <stdlib.h> # include <time.h> # define MAXN 3 using namespace std ; struct memPoint { int _list [ 4 ] ; int _all ; } ; 这里就没什么好说的了,stdlib与time都是随机数需要的库 memPoint _mem [ 4 ] [ 4 ] ; int _turn = 1 ; int _win = 0 ; int _draw = 0 ; int _lose = 0 ; _mem是记忆数组,剩下四个整形分别是回合,胜场,平场,负场 _mem[i][m]表示对手出i, 我们出j的状态 _mem[i][m]._all表示这个状态一共经历了几次 _mem[i][m]._list[k]表示这个状态下对手出k出了几次 void GenRand ( ) { srand ( time ( 0 ) ) ; } void GenMem ( ) { for ( int i = 0 ; i <= MAXN ; i ++ ) { for ( int m = 0 ; m <= MAXN ; m ++ ) { for ( int k = 1 ; k <= MAXN ; k

Deno MySQl ORM

放肆的年华 提交于 2020-07-29 07:45:58
视频演示 https://www.bilibili.com/video/BV1BT4y1E7Nh/?p=14 一起来完成以下步骤: 创建数据库连接 创建Model,也就是实体类 写新增、修改、查询和删除 运行:deno run --allow-net --allow-read --allow-write main.ts #controllers/employeeController.ts //引入Context import { Context } from "https://deno.land/x/oak/mod.ts" ; //引入仓库类 import employeeRepo from "../repositories/employeeRepo.ts" ; //获取当前目录方法 const { cwd } = Deno; class Controller { static async hello(ctx: any ) { //cwd获取当前工程目录 //注意 ' !== ` ctx.render( ` ${cwd()} /views/index.ejs` , { title: "Testing" , data: { name: "www.deepincoding.com" } }); } //保存 static async save(ctx: Context) { const