Gson-特殊字符的转义-disableHtmlEscaping()

escapeHtmlChars属性 GsonBuilder相关方法 public GsonBuilder disableHtmlEscaping() { this.escapeHtmlChars = false; return this; } 该属性默认为true,表示会将html中的字符例如< >这样的字符处理转义掉。设置为false后,就不会转义这些字符。直接看下面的例子更直观一些 首先创建默认escapeHtmlChars为true的GsonBuilder private static GsonBuilder getGsonBuilder() { return new GsonBuilder().serializeNulls().enableComplexMapKeySerialization().serializeSpecialFloatingPointValues().setLenient(); } 测试代码: String content = "<font color=\"#FB4E44\">"; test te= new test("colorcontent",content); //序列化 String result = getGson().toJson(te); System.out.println(result); te = getGson().fromJson(result,te.getClass()); //反序列化结果 System.out.println(te.name+" "+te.score); 序列化结果和反序列化结果分别为: {"name":"colorcontent","score":"\u003cfont color\u003d\"#FB4E44\"\u003e"} colorcontent <font color="#FB4E44"> 我们看到序列化的结果中<转义成了\u003c,反序列化后又将u003c转义为<了。 若是设置为escapeHtmlChars为false,也就是不转义,那么会是什么呢? private static GsonBuilder getGsonBuilder() { return new GsonBuilder().disableHtmlEscaping().serializeNulls().enableComplexMapKeySerialization().serializeSpecialFloatingPointValues().setLenient(); } 测试结果为 {"name":"colorcontent","score":"<font color=\"#FB4E44\">"} colorcontent <font color="#FB4E44"> 我们看到序列化的结果中左右尖括号并没有被转义,反序列化也是没有进行转义。所以该escapeHtmlChars影响序列化和反序列化是否转义html字符。

keyup keydown @keydown.down.prevent

keydown在keyup之前, keydown会触发光标的动作,也就是说,在keudown事件,光标前移, 如果阻止keydown的默认事件,光标就不会前移 键盘抬起一般没发生什么 事件一般都在keydown上面

uboot 中白名单问题解决

Linux uboot 白名单问题 最近在修改uboot 代码,在*.h配置文件中加入一个控制宏,发现编译不过,uboot 版本: 5 VERSION = 2017 6 PATCHLEVEL = 03 7 SUBLEVEL = 8 EXTRAVERSION = 加入宏后报如下错误: CFGCHK u-boot.cfg comm: file 2 is not in sorted order Error: You must add new CONFIG options using Kconfig The following new ad-hoc CONFIG options were detected: CONFIG_XXX_SERIAL_OUTPUT Please add these via Kconfig instead. Find a suitable Kconfig file and add a ‘config’ or ‘menuconfig’ option. make: *** [all] Error 1

Spring boot websocket

pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> websocket配置(没有此配置会导致连接websocket失败) package com.websocket.websocket.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter; @Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } } package com.websocket.websocket.Controller; import org.springframework.stereotype.Component; import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.atomic.AtomicInteger; @ServerEndpoint("/ws/asset") @Component public class WebSocketController { private static final AtomicInteger OnlineCount = new AtomicInteger(0); // concurrent包的线程安全Set,用来存放每个客户端对应的Session对象。 private static CopyOnWriteArraySet<Session> SessionSet = new CopyOnWriteArraySet<Session>(); /** * 连接建立成功调用的方法 */ @OnOpen public void onOpen(Session session) { SessionSet.

coturn服务器部署

一、coturn coturn 服务器完整的实现了 STUN/TURN/ICE 协议,支持 P2P 穿透防火墙。主要用于 webrtc 等点对点视频音频通话。 coturn 支持 tcp, udp, tls, dtls 连接;支持 linux bsd solaris mac os, 暂不支持windows GITHUB: https://github.com/coturn/coturn 二、Centos 7 执行命令 cat /etc/centos-release 三、下载编译安装coturn(错误参照第四步) mkdir wlx cd wlx git clone https://github.com/coturn/coturn.git cd coturn ./configure make make install 查看是否安装成功 which turnserver 四、解决报错 4.1 OpenSSL 错误 执行安装 yum -y install openssl-devel 4.2 Libevent2错误 安装 下载 libevent wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz tar zxvf libevent-2.0.21-stable.tar.gz cd libevent-2.0.21-stable && ./configure make && make install 五、配置文件 5.

windows 通过cmd命令(netsh wlan命令)连接wifi

windows 通过cmd命令(netsh wlan命令)连接wifi 1. 连接 1)显示本机保存的profiles,配置文件是以wifi的ssid命名的. netsh wlan show profiles 2)用netsh wlan connect name=xxxxx 连接其中一个profile 3)断开连接 netsh wlan disconnect 2. 帮助信息 3. 其他 其它常用的命令: Netsh WLAN delete profile name="Profile_Name"Netsh WLAN set profileparameter name="Profile_Name" connectionmode=manualNetsh WLAN set profileparameter name=" Profile_Name" connectionmode=auto列出配置文件:netsh wlan show profile导出配置文件:netsh wlan export profile key=clear删除配置文件:netsh wlan delete profile name=""添加配置文件:netsh wlan add profile filename=""连接指定热点:netsh wlan connect name="wifi name"列出无线接口:netsh wlan show interface开启无线接口:netsh interface set interface "Interface Name" enabled 4, 参考链接 微软官方指南:

jd-gui的下载和使用

jd-gui可以反编译class文件,有图形化界面。 下载地址:Releases · java-decompiler/jd-gui 2019-05-21:最新版本是1.5.0,下载jd-gui-1.5.0.jar 下载后运行命令打开: java -jar jd-gui-1.5.0.jar 打开后图形界面如下: 写Java代码: package test; public class App { public static void main(String[] args) { System.out.println("Hello World!"); } } 反编译: 可以看出这个工具还是非常好用的。

mac 安装MySQL 并使用 navicat premium 连接到到数据库

前段时间工作比较忙,博客也好长时间没有更新了!最近闲下来了,昨晚在mac 上装了一下数据库,中途也不是很顺利,决定在这里记录一下!废话不多说了,进入正题。 1、去mysql 官网下载mysql (我下载的是最新版) 安装过程不在过多叙述,百度上教程太多了,可以参考下边的连接 https://www.cnblogs.com/chenmo-xpw/p/6102933.html 有一点值得注意的是最新版本的安装过程中会让我们输入密码,设置好自己的密码以后再继续安装(这里要谨记密码,后边登录会用到) 2、安装完成以后,可以在~/.bash_profile 文件中配置下全局命令。 找到终端,输入下边的命令回车 vi ~/.bash_profile 在文件末尾追加复制进去这几行代码 ##myslq export PATH=${PATH}:/usr/local/mysql/bin alias mysqlstart='sudo /usr/local/mysql/support-files/mysql.server start' alias mysqlstop='sudo /usr/local/mysql/support-files/mysql.server stop' 然后按下esc 按键退出vim 编辑模式,shift + : ,然后输入wq 保存文件并退出 最后在更新一下 bash_profile 文件 不熟悉vim 的同学可以用下边的命令通过编辑器打开文件 修改并保存 open .bash_profile 使用下边的命令更新下 bash_profile 文件不然使用命令的时候可能因为缓存问题,命令没反应 source .bash_profile 然后在当前目录下输入 mysql -u root -p 会有提示输入数据库密码,这个密码就是我们在安装过程中设置的密码;登录成功后如下图 这时候说明数据库安装成功 常用数据库命令 https://www.runoob.com/mysql/mysql-create-database.html 参考mysql 菜鸟教程 3、然后在网上找个破解版的 navicat premium GUI 数据库管理工具下载并安装。 这里连接的时候出了个问题 就是在连接的时候总是不能成功报错信息 错误代码 2059 这个问题应该是只有mac 上才有的! 错误代码如下 Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_ password.

群、环、域的概念总结

很容易看懂 群 简而言之,群的概念可以理解为:一个集合以及定义在这个集合上的二元运算,满足群的四条公理,封闭性、结合性、单位元、反元素。具体理解为: 封闭性:在集合上作任意二元运算,不会诞生新的运算,这个集合已经经过充分的完美拓扑。 结合性:组合一个二元操作链,之间没有先后运算的区别,这种操作是平坦的(区别交换律)。 单位元:具有单位的属性,单位元和任何一个元素操作等于那个元素本身。 反元素:集合中任何一个元素,存在一个称为反元素的元素与那个元素进行操作后,最后的结果为单位元。 可交换群 简而言之,可交换群就是在满足群的”四公理“的基础上在加上一个可交换的属性,可把满足可交换的操作满足对称性。 环 简而言之,环是细化的群,一个环中涉及两个二元运算,分别是(R,+)与(R, ·),前者是个可交换群,后者是一个半群。半群可理解为仅仅满足封闭性以及结合律的群,则忽略了单位元与反元素的限制。似乎可以想象,如果一个群为以单元为中点的对称分布,则半群为群的单位元劈开的两瓣之一,所以称之为半群。 域 域的概念较为复杂,环的概念仅仅定义了两个运算,唯一的条件是,乘法关于加法满足可分配律。而进入到域的概念,则对这两个二元操作,强加了更多的限制。上面第一种定义很有趣,进入了除环的概念。在除环的基础上,额外加了一个可交换的限制条件。 伽罗瓦域 从域过度到伽罗瓦域较为简单,仅仅额外的加了一个限制:有限个元素。 从群到环,再到域,是一个条件逐渐收敛的过程,条件的收敛,也带来对更小数学集合上更丰富的特性。 细化到伽罗瓦域,这些更丰富的特性,为后来EC码的诞生奠定了数学基础,具有工程上的可实现性。 原文:https://blog.csdn.net/u013281331/article/details/28233961 

[数字逻辑] 全加器的多种电路设计方案

0x00 全加器 全加器是根据被加数 A i A_{i} Ai​、加数 B i B_{i} Bi​与低位进位 C i − 1 C_{i-1} Ci−1​计算出本位和 S i S_{i} Si​与进位 C i C_{i} Ci​。其真值表如下: A i A_{i} Ai​ B i B_{i} Bi​ C i − 1 C_{i-1} Ci−1​ S i S_{i} Si​ C i C_{i} Ci​0000000110010100110110010101011100111111 0x01 与非门、异或门 通过真值表,我们可以化简得到以下两条逻辑表达式: S i = A i ⊕ B i ⊕ C i − 1 S_{i}=A_{i} \oplus B_{i} \oplus C_{i-1} Si​=Ai​⊕Bi​⊕Ci−1​

python任务四

Task4(2day) 1.函数关键字 python中一共含有32个关键字:‘false’, ‘none’, ‘true’, ‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’ 关键字-是Python内置的、具有特殊意义的表示符 使用时关键字后面不需要括号 2.函数的定义 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。可以自己定义一个函数。 函数-封装了独立功能,可以直接调用 函数名(参数) 函数创建 #自定义函数 def function_name (str): “打印传入的字符串” print(str) return(0); #调用自定义函数 function_name(“自定义函数”) function_name(“调用自定义函数”) 3.函数参数与作用域 函数传递参数时的一些简要的关键点: 1)参数的传递是通过自动将对象赋值给本地变量名来实现的。所有的参数实际上都是通过指针进行传递的,作为参数被传递的对象从来不自动拷贝。 2)对于numbers,Strings,元祖这种不可改变值的类型,在函数内部的参数名的赋值不会影响调用者。原因就是这种类型会在改变值的时候,重新指向新地址,那么之前的对象执行地址值不会变,就等同于copy.(传递值就是传递指针的指向) 3)改变函数的可变对象参数的值会对调用者有影响。(直接在指向地址处修改值,不再重现创建新的地址作为指向) 匹配模型的大纲: 位置:从左至右进行匹配。 关键字参数:通过参数名进行匹配。(调用者可以定义哪一个函数接受这个值,通过在调用时使用参数的变量名,使用name=value这种语法。) 默认参数:为没有传入值的参数定义参数值。 可变参数:搜集任意多基于位置或关键字的参数。 可变参数解包:传递任意多的基于位置或关键字的参数。 Keyword-only参数:参数必须按照名称传递。(只存在于Python3.0中) 作用域 在一个Python程序只用变量名时,Python创建、改变或查找变量名都是在所谓的命名空间(一个保存变量名的地方)中进行的。也就是说,在代码中变量名被赋值的位置决定了这个变量名能被访问到的范围,也即决定了它存在于哪个命名空间中。 4.函数返回值 函数需要先定义后调用,函数体中 return 语句的结果就是返回值。如果一个函数没有 reutrn 语句,其实它有一个隐含的 return 语句,返回值是 None,类型也是 ‘NoneType’。

整理了八个开源的 Spring Boot 学习资源

Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 《Spring Boot + Vue 全栈开发实战》迄今为止已经加印了 3 次,Spring Boot 的受欢迎程度可见一斑。经常有人问松哥有没有推荐的 Spring Boot 学习资料?当然有!买松哥书就对了,哈哈。除了书呢?当然就是开源项目了,今天松哥整理了几个优质 Spring Boot 开源项目给大家参考,希望能够帮助到正在学习 Spring Boot 的小伙伴! spring-boot-examples star 数 14821项目地址:github.com/ityouknow/s… 这个项目中整合了 Spring Boot 使用的各种示例,以最简单、最实用为标准,此开源项目中的每个示例都以最小依赖,最简单为标准,帮助初学者快速掌握 Spring Boot 各组件的使用。基本上涉及到了 Spring Boot 使用的方方面面。 项目部分 demo 截图: 微人事 star 数 3333项目地址:github.com/lenve/vhr 微人事是一个前后端分离的人力资源管理系统,项目采用 SpringBoot + Vue 开发。项目打通了前后端,并且提供了非常详尽的文档,从 Spring Boot 接口设计到前端 Vue 的开发思路,作者全部都记录在项目的 wiki 中,是不可多得的 Java 全栈学习资料。 项目效果图: 项目部分文档截图: mall star 数 12668项目地址:github.com/macrozheng/… mall 项目是一套电商系统,包括前台商城系统及后台管理系统,基于 Spring Boot + MyBatis 实现。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

ex39 列表

脚本内容 ten_things = "Apple Orange Crow Telephone Light Sugar" print("Wait there's not 10 things in that lists,let's fix it.") stuff = ten_things.split(' ') #根据空格将ten_things分割开来 more_stuff = ["Day","Night","Song","Rice","Corn","Banana","Girl","Boy"] while len(stuff) != 10: #一直循环执行,直到stuff元素个数>=10 next_one = more_stuff.pop() #pop默认是从最后一个开始,也即将more_stuff列表里的最后一个元素返回到next_one中 print("Adding:",next_one) stuff.append(next_one) print("There is %d items now." %len(stuff)) #报告当前stuff的元素个数 print("Now we have:",stuff) #将当前的10个元素列出来 print("Let's do something with stuff.") print(stuff[1]) #第二个元素 print(stuff[-1]) #倒数第一个元素 print(stuff.pop()) #pop默认是最后一个元素,同上 print(' '.join(stuff)) #用空格将stuff的各个元素连接起来 print('#'.join(stuff[3:5])) #用#号将stuff的第四个(3)元素和第五个(5)元素连接起来,包头不包尾 运行结果 PS E:\tonyc\Documents\Vs workspace> cd 'e:\tonyc\Documents\Vs workspace'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'D:\Anboot\Python\python.

vue项目中禁止页面滚动 / 滚动事件穿透 (弹出蒙版时,弹出层下面还可以滚动)

vue项目中禁止页面滚动 / 滚动事件穿透 移动端解决方案PC端解决方案 vue项目中弹出层时,蒙版下还可以滚动页面。 移动端解决方案 在蒙层所在div上加 @touchmove.prevent <div class="maskBox" @touchmove.prevent></div> PC端解决方案 弹层显示时调用 stopMove()停止页面滚动 ,弹层消失时调用 Move()开启页面滚动 //停止页面滚动 stopMove(){ let m = function(e){e.preventDefault();}; document.body.style.overflow='hidden'; document.addEventListener("touchmove",m,{ passive:false });//禁止页面滑动 }, //开启页面滚动 Move(){ let m =function(e){e.preventDefault();}; document.body.style.overflow='';//出现滚动条 document.removeEventListener("touchmove",m,{ passive:true }); }

ex35 分支和函数

这是一个简单的游戏,主要是使用了函数的定义,不同的分支调用 from sys import exit #exit(0)无错误退出,exit(1)有错误退出 def gold_room(): print("This room is full of gold,how much do you want to take?") next = input('>') if '0' in next or '1' in next: how_much = int(next) #把next改为整型 else: dead("Man,learn to type a number.") if how_much < 50: print("Great,you're not greedy.") exit(0) else: dead("You greedy bastard.") def bear_room(): print("There is a bear here with lots of money.") print("The fat bear is in front of another door,how are you going to move the bear?

Bad owner or permissions on /home/xxxxx/.ssh/config 问题

今天拉代码不知道之前做了啥操作,一直拉不下来且报如下错误: ./repo/repo init -u ssh://igerrit.storm:29418/Src/iauto-things/manifests -b xxx/master -m default.xml Get ssh://igerrit.storm:29418/Src/xxxxx/manifests Bad owner or permissions on /home/xxxxx/.ssh/config Bad owner or permissions on /home/xxxxx/.ssh/config fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 后来去.ssh/config下查看配置,一看呗清空了,可能是之前拉另外一个项目时候,做了一些操作导致,所以把配置再加上,再去拉代码还是报上面错误: 最后查找解决方法: The ssh with RHEL 4 is a lot more anal about security checking. In my case, it was the fact that $HOME/.ssh/config was group-writable which was causing it to barf.

生成对抗网络GAN详解

这里直接贴一篇好的博文: 简单理解与实验生成对抗网络GAN 参考博文: 生成对抗网络——GAN(一)

gem5--Getting started with gem5

gem5--Getting started with gem5 Creating a simple configuration scriptAdding cache to the configuration script输出信息和熟悉默认配置模式总结 注:关于如何搭建gem5环境,不再进行过多的介绍。直接参照gem5的官方文档即可。 http://www.m5sim.org/Main_Page 今天有了一点时间,来搞一下如何进行gem5的配置。 Creating a simple configuration script 在这里,我想搭建的是一个如下图的结构模型,这个结构模型中暂时没有考虑cache等复杂结构。 首先要做的是在 gem5/configs中新建一个py脚本文件,然后在脚本文件中写入配置信息。 然后我们要在这个文件中引入m5包和我们编译好的文件,并创建一个system对象。 import m5 from m5.objects import * system = System() 然后这里我推荐一下gem5的官方文档,这这里可以找到自己需要使用的类和函数 http://www.gem5.org/docs/html/index.html 在这个架构中,我们首先要模拟的是的是时钟信息,在这里首先要创建一个 clock domain对象,然后进行时钟信息配置。查找官方文档,找到Srcclockdomain类库。 http://www.gem5.org/docs/html/classSrcClockDomain.html#details 创建完clock domain 对象后,要进行频率和电压的配置(这里先不考虑电压问题,所以使用默认电压)http://www.gem5.org/docs/html/classVoltageDomain.html system.clk_domain = SrcClockDomain() system.clk_domain.clock = '1GHz' system.clk_domain.voltage_domain = VoltageDomain() 模拟完时钟后,进行内存的模拟。在进行内存模拟时需要进行模式和大小的配置,模式一般都配置为timing mode。(后续如果碰到需要配置为其他模式的时候会进行补充) system.mem_mode = 'timing' system.mem_ranges = [AddrRange('512MB')] 然后是CPU的模拟,因为这只是做开始的一个小测试,使用的是最简单的基于时序的CPU,然后是membus系统总线的创建和CPUcache端口的链接: system.cpu = TimingSimpleCPU() system.membus = SystemXBar() system.cpu.icache_port = system.

这些前端简洁代码,让你无形装X

日历 创建过去七天的数组,如果将代码中的减号换成加号,你将得到未来7天的数组集合 // 创建过去七天的数组 [...Array(7).keys()].map(days => new Date(Date.now() - 86400000 * days)); 复制代码 生成随机ID 在原型设计时经常使用的创建ID功能。但是我在实际项目中看到有人使用它。其实这并不安全 // 生成长度为11的随机字母数字字符串 Math.random().toString(36).substring(2); // hg7znok52x 复制代码 获取URL的查询参数 这个获取URL的查询参数代码,是我见过最精简的QAQ?foo=bar&baz=bing => {foo: bar, baz: bing} // 获取URL的查询参数 q={};location.search.replace(/([^?&=]+)=([^&]+)/g,(_,k,v)=>q[k]=v);q; 复制代码 生成随机十六进制代码(生成随机颜色) 使用JavaScript简洁代码生成随机十六进制代码 // 生成随机十六进制代码 如:'#c618b2' '#' + Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, '0'); 复制代码 返回一个键盘 这是一个很难看懂的简洁代码,但是运行后你会惊呆的,他竟然返回一个图形键盘 // 用字符串返回一个键盘图形 (_=>[..."`1234567890-=~~QWERTYUIOP[]\\~ASDFGHJKL;'~~ZXCVBNM,./~"].map(x=>(o+=`/${b='_'.repeat(w=x<y?2:' 667699'[x=["BS","TAB","CAPS","ENTER"][p++]||'SHIFT',p])}\\|`,m+=y+(x+' ').slice(0,w)+y+y,n+=y+b+y+y,l+=' __'+b)[73]&&(k.push(l,m,n,o),l='',m=n=o=y),m=n=o=y='|',p=l=k=[])&&k.join` `)() 复制代码

Java 根据输入的年份和月份 打印输出 当月的日历表(参考自己电脑的 日历格式)

//键盘输入年和月 打印日历 作者:1904陈文博; Scanner input=new Scanner(System.in); System.out.println("请输入年份:"); int year=input.nextInt(); System.out.println("请输入月份:"); int month=input.nextInt(); Calendar calendar=Calendar.getInstance(); calendar.set(year, month-1,01); //赋值 int week=calendar.get(Calendar.DAY_OF_WEEK)-1; //获得星期 int min = calendar.getActualMinimum(Calendar.DAY_OF_MONTH); //获取本月起始 int max = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); //获取本月结束 int k=week-1; max=max+(week-1); System.out.println("--------------------"+year+"年"+month+"月日历-----------------------"); System.out.println("一\t二\t三\t四\t五\t六\t日"); for (int i = min; i <=max; i++) { if(i<week) { System.out.print("\t"); }else { System.out.printf(new DecimalFormat("00").format((i-(week-1)))+"\t"); } if(i%7==0) { System.out.println(); } }