wechat

java.lang.String 的 + 号操作到底做了什么?

生来就可爱ヽ(ⅴ<●) 提交于 2020-08-15 04:45:28
作者:丶Pz https://www.cnblogs.com/panzi/p/11956782.html 在之前的面试经历中,对于 String 的考察还是挺频繁的,大致考察以下几个知识点: String 常量池 new String() == 和 equals 的区别 native 方法 String.intern() 虽然面试中大体答对了,但是今天早上微信群里的一个问题我却答不上来,这个问题是这样的: String str3 = "what"; String str4 = str3 + " a nice day"; //运行时, + 相当于 new,所以堆中会有 "what a nice day"对象,常量池中会有"what"," a nice day"两个对象,而不会有 "what a nice day"对象。 //这句话大佬们看看对不对啊,我怎么感觉不对啊 //常量池不会有"what a nice day" 对象吗? 看完这个问题,说实话我也是有点懵的,我只是知道 "what a nice day"不会在常量池,但是不知道具体的原因,后来群里的同学说 + 号是调用了 StringBuffer 的append 方法。 我去证实了,发现确实调用了 append 方法,但是当时没有 调用toString()方法,我很疑惑。(最后经过证实,是 StringBuilder

测试为何会错过Bug

拟墨画扇 提交于 2020-08-15 03:51:21
为了确保 快速变化 的质量,测试领域正随着技术的进步以更快的速度发展。 持续集成 , 数字化转型 , 生命周期自动化 , 将质量向左转移 以最大程度地降低成本等都是不断变化的神奇词汇。当我们谈论这些内容时,仍然会听到潜在的问题 为什么以及如何错过缺陷? ,并且仍然没有得到答案。 尽管我们所有人都希望自己具有逻辑性,结构性和理性,但可悲的事实是我们都受到认知偏见的影响,而认知偏见也影响着我们日常生活中的思维过程,包括我们的专业测试工作。 认知偏差 如百科所述: 认知偏见是一种偏离规范或理性判断的系统模式。个人从对输入的感知中创建自己的主观社会现实。 一个人对社会现实的主观认识,而不是客观的思考,会决定他们在社会世界中的行为。因此,认知偏见有时可能导致知觉扭曲,判断不正确,不合逻辑的解释或不合理。 这是一个很好的定义,那么它如何影响思维以及对测试领域的测试人员意味着什么呢? 当测试人员进行任何测试时,他们已经受到了自己的偏见的影响–根据要寻找的内容,可能出现的潜在缺陷,谁在开发它,程序的整个历史等来构想和判断。而这样的例子不胜枚举。 对于我们来说,了解不同类型的偏见非常重要,这样我们才能更加了解并确实想到有效管理它们。 寻找软件测试中的认知偏见类型 相似偏差 对于大部分而言,根据相似情况的相似性来判断情况非常容易。 例如,作为测试人员,我们经常倾向于认为 Web应用程序

关于Java8的精心总结

半世苍凉 提交于 2020-08-14 22:33:49
前言 ​ 最近公司里比较新的项目里面,看到了很多关于java8新特性的用法,由于之前自己对java8的新特性不是很了解也没有去做深入研究,所以最近就系统的去学习了一下,然后总结了一篇文章第一时间和大家分享一下。 ​ ​ 在了解一项新技术之前,我们需要了解我们为什么要去学习它以及它的优点,以下是我总结的: Java8(又称jdk1.8)是java语言开发的一个主要版本,Java8是oracal公司于2014年3月发布,可以看成是自java5以来最具有革命性的版本。 **新特性的优点:**速度更快、代码更少、便于并行、最大化减少空指针异常 函数式编程提供了一种更高层次的抽象化 排序: List<RoleEntity> rolesListSort = rolesList.stream().sorted(Comparator.comparing(RoleEntity::getCreateDate)).collect(Collectors.toList()); Consumer是一个函数式接口 参数是Consumer类型的,Consumer里面的泛型表示泛型的类型要么是Integer,要么是Integer的父类,super表示它及它上面的,也就是父类。 下面这段代码是在Iterable接口里面的默认方法,jdk8之后的新方法,默认方法(默认方法的引入很大程度上是为了保证向后兼容)

微信浏览器内 h5 直接唤醒 app 之 微信开放标签 wx-open-launch-app

穿精又带淫゛_ 提交于 2020-08-14 13:33:51
以前微信浏览器内想要直接唤醒 app 要么接微信的应用宝要么你是腾讯的干儿子。 而在微信在2020年5月分推出了“微信开放标签”功能 wx-open-launch-app 用于微信浏览器内直接唤醒 app ,也可通过携带参数直接进入app相应的内页。 现在不是干儿子,只要按照规定接入微信SDK就直接可以使用此功能。 一、适用环境 微信版本要求为:7.0.12及以上。 系统版本要求为:iOS 10.3及以上、Android 5.0及以上 二、接入微信JS-SDK 按微信JS-SDK要求绑定安全域,并通过config接口注入权限验证配置 wx.config({ appId: '' , debug: true , timestamp: '' , nonceStr: '' , signature: '' , jsApiList: [ 'onMenuShareTimeline', // 分享给好友 'onMenuShareAppMessage', // 分享到朋友圈 ], openTagList: [ ' wx-open-launch-app’] // 获取开放标签权限 }); 需要注意的点: 1、符合开放平台列出的要求 https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_H5_Launch_APP.html 2

阿里为什么不用 Zookeeper 做服务发现?

两盒软妹~` 提交于 2020-08-14 13:28:07
作者:中间件小哥 https://yq.aliyun.com/articles/601745 站在未来的路口,回望历史的迷途,常常会很有意思,因为我们会不经意地兴起疯狂的念头,例如如果当年某事提前发生了,而另外一件事又没有发生会怎样? 一如当年的奥匈帝国皇位继承人斐迪南大公夫妇如果没有被塞尔维亚族热血青年普林西普枪杀会怎样,又如若当年的丘老道没有经过牛家村会怎样? 2007年底,淘宝开启一个叫做“五彩石”的内部重构项目,这个项目后来成为了淘宝服务化、面向分布式走自研之路,走出了互联网中间件体系之始,而淘宝服务注册中心ConfigServer于同年诞生。 2008年前后,Yahoo 这个曾经的互联网巨头开始逐渐在公开场合宣讲自己的大数据分布式协调产品 ZooKeeper ,这个产品参考了Google 发表的关于Chubby以及 Paxos 的论文。 2010年11月,ZooKeeper从 Apache Hadoop的子项目发展为 Apache的顶级项目,正式宣告 ZooKeeper成为一个工业级的成熟稳定的产品。 2011年,阿里巴巴开源 Dubbo ,为了更好开源,需要剥离与阿里内部系统的关系,Dubbo 支持了开源的 ZooKeeper 作为其注册中心,后来在国内,在业界诸君的努力实践下, Dubbo + ZooKeeper 的典型的服务化方案成就了 ZooKeeper

27. 学习 Go 协程:WaitGroup

泄露秘密 提交于 2020-08-14 10:52:50
Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客: http://golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime 在前两篇文章里,我们学习了 协程 和 信道 的内容,里面有很多例子,当时为了保证 main goroutine 在所有的 goroutine 都执行完毕后再退出,我使用了 time.Sleep 这种简单的方式。 由于写的 demo 都是比较简单的, sleep 个 1 秒,我们主观上认为是够用的。 但在实际开发中,开发人员是无法预知,所有的 goroutine 需要多长的时间才能执行完毕,sleep 多了吧主程序就阻塞了, sleep 少了吧有的子协程的任务就没法完成。 因此,使用time.Sleep 是一种极不推荐的方式,今天主要就要来介绍 一下如何优雅的处理这种情况。 1. 使用信道来标记完成 “不要通过共享内存来通信,要通过通信来共享内存” 学习了信道后,我们知道,信道可以实现多个协程间的通信,那么我们只要定义一个信道,在任务完成后,往信道中写入true

用户密码到底要怎么加密存储?

 ̄綄美尐妖づ 提交于 2020-08-14 08:26:13
作者:张辉 https://blog.csdn.net/ctrip_tech/article/details/80125741 作为互联网公司的信息安全从业人员经常要处理撞库扫号事件,产生撞库扫号的根本原因是一些企业发生了信息泄露事件,且这些泄露数据未加密或者加密方式比较弱,导致黑客可以还原出原始的用户密码。 目前已经曝光的信息泄露事件至少上百起,其中包括多家一线互联网公司,泄露总数据超过10亿条。 要完全防止信息泄露是非常困难的事情,除了防止黑客外,还要防止内部人员泄密。但如果采用合适的算法去加密用户密码,即使信息泄露出去,黑客也无法还原出原始的密码(或者还原的代价非常大)。 也就是说我们可以将工作重点从防止泄露转换到防止黑客还原出数据。下面我们将分别介绍用户密码的加密方式以及主要的破解方法。 一、用户密码加密 用户密码保存到数据库时,常见的加密方式有哪些,我们该采用什么方式来保护用户的密码呢?以下几种方式是常见的密码保存方式: 1、直接明文保存 ,比如用户设置的密码是“123456”,直接将“123456”保存在数据库中,这种是最简单的保存方式,也是最不安全的方式。但实际上不少互联网公司,都可能采取的是这种方式。推荐阅读: 2019 年 10 个最烂的密码 。 2、使用对称加密算法来保存 ,比如3DES、AES等算法,使用这种方式加密是可以通过解密来还原出原始密码的

PHP实现QQ登录的开发原理和实现过程

十年热恋 提交于 2020-08-14 06:27:55
第三方登录,就是使用大家比较熟悉的比如QQ、微信、微博等第三方软件登录自己的网站,这可以免去注册账号、快速留住用户的目的,免去了相对复杂的注册流程。下边就给大家讲一下怎么使用PHP开发QQ登录的功能。 1、进入QQ互联官网进行登录(可以使用自己的QQ或者重新注册一个QQ号作为咱们项目的单独QQ进行管理),地址: https:// connect.qq.com/ 2、点击“应用管理”进入QQ互联管理中心,在这里进行相关应用的创建,分为 网站应用 和 移动应用。选择自己想要的应用进行资料的填写(审核需要等待大概7天左右),审核通过你将获得APP ID和APP Key 3、审核通过获得相关接口:get_user_info。 4、下载QQ互联相关的demo http:// wiki.connect.qq.com/sdk %E4%B8%8B%E8%BD%BD 我下载的是 PHP SDK v2.1 5、仔细观察sdk我们会发现它包含有4个文件夹、2个文件,其中最主要的是API文件夹,其余的我觉得都可以忽略不看(你看也没事),按照这篇文档一步一步往下进行,你就可以实现登录的功能。 6、将API文件夹拷贝到你的项目里,至于拷贝到项目的哪个文件夹,只要你能引入就行,看你心情来就可以,前期准备做好,接下来就是写代码了。 7、打开你拷贝到项目里的API文件夹,其中有一个comm文件夹

10 个经典的 Java 集合面试题,看你能否答得上来?

自作多情 提交于 2020-08-14 05:52:43
来源:龚雪 http://dwz.win/B27 这里有10个经典的Java面试题,也为大家列出了答案。这是Java开发人员面试经常容易遇到的问题,相信你了解和掌握之后一定会有所提高。 让我们一起来看看吧。 1.Java的HashMap是如何工作的? HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值。 HashMap 基于 hashing 原理,我们通过 put ()和 get ()方法储存和获取对象。当我们将键值对传递给 put ()方法时,它调用键对象的 hashCode ()方法来计算 hashcode,让后找到 bucket 位置来储存值对象。 当获取对象时,通过键对象的 equals ()方法找到正确的键值对,然后返回值对象。HashMap 使用 LinkedList 来解决碰撞问题,当发生碰撞了,对象将会储存在 LinkedList 的下一个节点中。HashMap 在每个 LinkedList 节点中储存键值对对象。 2.什么是快速失败的故障安全迭代器? 快速失败的Java迭代器可能会引发ConcurrentModifcationException在底层集合迭代过程中被修改。故障安全作为发生在实例中的一个副本迭代是不会抛出任何异常的。 快速失败的故障安全范例定义了当遭遇故障时系统是如何反应的。例如

15. 理解 Go 语言面向对象编程:结构体与继承

自古美人都是妖i 提交于 2020-08-14 02:22:11
Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客: http://golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime 0. 什么是结构体? 在之前学过的数据类型中,数组与切片,只能存储同一类型的变量。若要存储多个类型的变量,就需要用到结构体,它是将多个容易类型的命令变量组合在一起的聚合数据类型。 每个变量都成为该结构体的成员变量。 可以理解为 Go语言 的结构体struct和其他语言的class有相等的地位,但是Go语言放弃大量面向对象的特性,所有的Go语言类型除了指针类型外,都可以有自己的方法,提高了可扩展性。 在 Go 语言中没有没有 class 类的概念,只有 struct 结构体的概念,因此也没有继承,本篇文章,带你学习一下结构体相关的内容。 1. 定义结构体 声明结构体 type 结构体名 struct { 属性名 属性类型 属性名 属性类型 ... } 比如我要定义一个可以存储个人资料名为 Profile 的结构体,可以这么写 type Profile struct {