wechat

我的开发日记(十二)

流过昼夜 提交于 2020-08-13 20:08:12
这两天继续联调,做一些细节的修改,总体来讲问题不大。总结如下:踩了一个坑,学到了数据库回滚。 坑:又是字符编码 这个项目有一个中间层服务,前端的请求在中间层会被处理一下,然后转发到我的 Java 服务。中间层主要是校验用户登录状态和处理用户登录信息。结果发现中间层在处理参数的时候,默认都都转成了 Unicode 编码格式的字符串了。这个说法可能用词有些不当,就是前段传的参数是 测试 ,我收到的参数是 \u6d4b\u8bd5 ,而且是 utf-8 编码格式的字符串。我有点迷,找了半天问题,虽然不知道为啥这么做,但是数据库里面确实正常的。中间层服务是 Python 的,大概是 Python 语言的习惯吧。 我收到的参数: 跳过中间层,从前端直接发请求到我的服务上时参数如下: 上网抄了一个解决方案: /** * 处理Unicode码转成utf-8 * * @param str * @return */ public static String unicodeToString(String str) { Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))"); Matcher matcher = pattern.matcher(str); char ch; while (matcher.find()) { String

游戏开发中的新手引导与事件管理系统

若如初见. 提交于 2020-08-13 12:17:31
前言 在游戏开发接近尾声的时候,大部分的游戏都会接入新手引导功能,提升玩家的游戏体验,不至于让玩家进入游戏有冷场或者不知所措的感觉。 对于新手引导的做法估计一百个人有一百种方式,接下来我将分享一下自己的使用方式,并伴随一些问题的讨论。 教学引导 1. 使用简单的遮罩聚焦。 这种方式可以转移玩家的注意力,毕竟进入游戏的时候内容有很多,但是人的接受能力有限。 可以根据配置表设置决定是否有遮罩 2. 将引导放到最上层,屏蔽触摸事件 这种方式比较省事,也避免了玩家乱点导致的引导错误。但是我们可以通过配置表的方式,决定这一步是否为强制引导,如果不是那么可以不屏蔽事件。 3. 手指位置如何获得 通过配置好的界面节点名称,控件名称直接获得节点。 这里边使用的数组的形式配置,是预留的为了实现拖拽教学。让手指从一个位置滑动到另一个位置。 setWidget() { if (this.widget) { return; } let parent = EngineHelper.findChild(this.className, UIManager.instance().getRoot()) if (parent) { if (this.widgetName) { if (this.widgetName == 'this') { this.widget = parent; } else { this

Dubbo 2.7.7 发布,FastJson 升级了!

僤鯓⒐⒋嵵緔 提交于 2020-08-13 09:53:03
作者:局长 www.oschina.net/news/115796/dubbo-2-7-7-released Apache Dubbo 2.7.7 已发布,这是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用、智能容错和负载均衡,以及服务自动注册和发现。 新版本更新内容如下: Features [Solution] 提供集成 Apache Dubbo 与 Nacos 认证的解决方案 完整的 lfu 缓存建议 [Feature] 支持应用选择首选的网络接口 [Dubbo-Performance] 重用 Hessian2Output 和 Hessian2Input 实例来降低内存使用 [Feature] In-Memory MetadataReportFactory implementation @reference和 @service 的命名问题 支持 RPC 调用链上的超时传递和倒计时 添加新的负载均衡策略 Enhancement 当 RPC 调用失败时会调用 onThrowable 升级 fastjson 至 1.2.68 升级 hessian-lite 至 3.2.7 [feature] 当线程池用尽时会发布 ThreadPoolExhaustedEvent 当处于 FINALIZE 状态时,ReferenceConfig(null

Spring 解决循环依赖的 3 种方式!

て烟熏妆下的殇ゞ 提交于 2020-08-13 09:25:23
作者:学习园 https://blog.csdn.net/u010644448/article/details/59108799 循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错。 下面说一下Spring是如果解决循环依赖的。 第一种:构造器参数循环依赖 Spring容器会将每一个正在创建的Bean 标识符放在一个“当前创建Bean池”中,Bean标识符在创建过程中将一直保持在这个池中。 因此如果在创建Bean过程中发现自己已经在“当前创建Bean池”里时将抛出BeanCurrentlyInCreationException异常表示循环依赖;而对于创建完毕的Bean将从“当前创建Bean池”中清除掉。 首先我们先初始化三个Bean。 public class StudentA { private StudentB studentB ; public void setStudentB(StudentB studentB) { this.studentB = studentB; } public StudentA() { } public StudentA(StudentB studentB) { this.studentB = studentB; } } public class

Mybatis trim 标签的 2 个妙用!

自作多情 提交于 2020-08-13 09:14:37
mybatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀,或者添加“)“等后缀,可用于选择性插入、更新、删除或者条件查询等操作。 以下是trim标签中涉及到的属性: 下面使用几个例子来说明 Mybatis trim标签的使用。 1、使用trim标签去除多余的and关键字 有这样的一个例子: <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE <if test="state != null"> state = #{state} </if> <if test="title != null"> AND title like #{title} </if> <if test="author != null and author.name != null"> AND author_name like #{author.name} </if> </select> 如果这些条件没有一个能匹配上会发生什么?最终这条 SQL 会变成这样: SELECT * FROM BLOG WHERE 这会导致查询失败。如果仅仅第二个条件匹配又会怎样? 这条 SQL 最终会是这样: SELECT * FROM

一个骚命令防止你的文件被误删除!

我的未来我决定 提交于 2020-08-13 08:32:03
大家好,我是良许。 文件是我们在电脑里最珍贵的财富,我们经常工作了老半天,然后出来的成果就只是一个文件而已。特别是程序员,我们写了半天的代码,结果也就是一个个代码文件而已。 但是,我们都有过这样惨痛的经历——工作了老半天,结果不小心把文件删除了…… 这时候,你的心情是怎样的?痛苦?自责?无奈? 今天良许就给大家介绍一个命令,它将给你的重要文件加一把锁,防止误删除或误修改,为你的宝贝文件保驾护航! chattr命令简介 这里我们需要使用到一个命令是: chattr ,这个命令在大部分的 Linux 发行版里都有,所以对于它的安装就不赘述了。它的基本用法如下: $ chattr 操作符 属性 文件名 对于操作符,有以下三种: + :给文件增加属性 - :去除文件属性 = :设置文件的仅有属性 注意,这里讲的属性不是文件对应的系统属性,而是 chattr 给文件赋予的属性。本文要讲的属性有以下两个: a - 允许给文件追加内容 i - 保护模式(不允许删除或修改) 但是,它的属性可以设置很多,有兴趣的小伙伴可以去看下它的 man 手册。 $ man chattr 防止文件被误删除或修改 假如我们现在有个国宝级重要文件 file.txt ,现在我们使用 chattr 对它进行保护。在这里,我们给文件增加 +i 属性: $ sudo chattr +i file.txt 然后,我们可以使用

敏捷测试中面临的挑战

隐身守侯 提交于 2020-08-13 05:17:54
即使我们在工作中追求成功,但有时失败是不可避免的。但是在大多数情况下,如果我们只是避免一些失误并克服阻碍进度的重大挑战,那么通往成功的道路似乎并不那么具有挑战性。对于敏捷测试团队来说,持续交付的压力可能是非常巨大的。 敏捷的测试团队通常试图尽可能地消除不确定性因素。但是,保持简短有效难道不可以带来更好的结果的吗? 这只是实际上可能降低工作效率的一个例子!说到这,在本文中,将介绍测试人员在敏捷测试中遇到的一些挑战。 不适应不断变化的需求 毫无疑问,提出一个好的敏捷测试计划至关重要。但是,如果觉得自己的计划是万无一失的,并且永远不需要进行修改,那大概率会吃土。一部分团队浪费大量时间来尝试制定理想的敏捷测试计划。 现在,尽管我们要实现多少目标,但事实是还不存在完善的敏捷测试计划。复杂的环境不允许这样做。有时必须临时进行更改。总而言之,计划实施必须灵活并适应具体场景的变化,请记住,这一切都与团队目标保持一致。 不重视跨浏览器测试 当网站成功在主要浏览器(例如 Google Chrome 和 Mozilla Firefox ,包括 edge )上运行时,大多数公司会停止测试。但是,如果网站仅在少数几种流行的浏览器上运行良好,真的认为可以广泛的用户群体吗? 毕竟,没有用户会局限于一堆浏览器。不能假设如果某个 Web应用程序 在一个浏览器中运行正常,则其他浏览器也是如此

Spring Boot 如何做参数校验?

本小妞迷上赌 提交于 2020-08-13 03:57:41
作者:狂乱的贵公子 cnblogs.com/cjsblog/p/8946768.html 1、背景介绍 开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码。 这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已。 接下来,用Validation来改写这段。 2、Spring Boot文档中的Validation 在Spring Boot的官网中,关于Validation只是简单的提了一句,如下 其实, Spring Validator 和 Hibernate Validator 是两套Validator,可以混着用,这里我们用**Hibernate Validator。**在Java技术栈微信公众号后台回复关键字: boot ,可以获取更多栈长整理的 Spring Boot 系列技术干货。 3、Hibernate Validator https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#preface 4、Spring Validator https://docs.spring.io/spring/docs/5.0.5.RELEASE/spring-framework-reference/core.html#validation 5、示例 5.1

用 Git 和 Github 提高效率的 10 个技巧!

家住魔仙堡 提交于 2020-08-13 02:36:39
作者:张伯函 segmentfault.com/a/1190000003830252 Git 和 GitHub 都是非常强大的工具。即使你已经使用他们很长时间,你也很有可能不知道每个细节。 我整理了 Git 和 GitHub 可能提高日常效率的10个常用技巧。 如果你想看视频教程,请看文末推荐! GitHub 1、快捷键: t 和 w 在你的源码浏览页面,按 t 可以快速进入模糊文件名搜索模式: 在你仓库主页,按 w 可以快速进行分支过滤: 在任意 GitHub 页面中,按 ? 展示当前页面可用的快捷键: 2、忽略空格: ?w=1 在任意的 diff URL 添加 ?w=1 用来整理缩进: 3、按范围过滤提交记录: master@{time}..master 你可以创建一个对比页面通过使用 URL github.com/user/repo/compare/{range}。范围 (range) 可以是两个 SHA 例如 sha1…sha2 或者两个分支名称例如 master…my-branch。范围同时也非常智能的支持使用时间作为关注点。你可以通过 master@{1.day.ago}…master 过滤从昨天开始的提交。例如:链接, https://github.com/rails/rails/compare/master@{1.day.ago}…master 显示 Rails

SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(开发部署)

心已入冬 提交于 2020-08-12 11:36:27
作者 | 孤弋 阿里云高级技术专家,负责 EDAS 的开发和用户体验优化工作。 导读 :在上一篇文章 《SpringCloud 应用在 Kubernetes 上的云上实践 - 开发篇》 中讲到可以通过两个工具,轻松地将一个 SpringCloud 应用从初始化到本地运行。本篇文章,我们将介绍如何将上一篇文章中提到的应用在云上跑起来。 初始化集群 为了将应用运行在云端,首先我们需要一个 Kubernetes 集群,在 EDAS 中使用 Kubernetes 集群目前最快的方式,是将一个阿里云容器集群中的 Kubernetes 集群( ACK 集群 ),导入到 EDAS 中来。 如果还没有ACK集群的话,您可以通过以下两种方式来创建一个: 直接进入容器服务的控制台进行创建; 如果您已经有一个在云上建好的集群,或者有一个在其他 IDC 或友商中有的集群,也可以在容器服务这边通过“注册已有集群”的方式,导入到容器服务中来。 等到 Kubernetes 集群就绪之后,在 EDAS 上需要进行一次集群“导入”,导入方式如下图所示: 在导入集群时,EDAS 会做以下操作: 初始化 EDAS 的集群控制器和相关资源,主要包含:基于开放云原生应用标准的 OAM Controller、日志采集的 Agent、监控链路中的 Arms 环境信息等;其中大部分控制器运行时不会占用用户集群的资源,而会运行在