为什么Java中char类型不能完整表示一个字符?

在Java中,一个char类型变量大多数情况下可以存储一个字符,但是有的时候却不可以。要想搞清楚原因,就需要了解到字符集、字符编码、码点和代码单元等等概念。本文将逐一解释这些概念。

什么是字符集

我们日常生活中所使用的文字,在存储到计算机中的时候需要使用二进制的形式,通俗地来说就是一个字符要唯一对应一个数字。字符集就用来表达这种对应关系的。这个世界上有很多的字符集,比如说简单的ASCII、国家标准总局发布的GB2312GB18030以及还在不断发展的Unicode

Unicode包含了世界上大多数的文字和符号。我们平常聊天时常用的表情符号 – Emoji,就已经被Unicode标准化了,每个表情就代表了一个“文字”。Unicode中,每个字符对应的数字,叫代码值(又叫Code Point, 码点),通常会以”U+”开头,后面跟上一串十六进制数字。比如U+86CB所表示的文字就是中文里的”蛋”。

(更多…)

继续阅读 →

全球包邮购书神器BookDepository

搞技术时间久了,会发现很多翻译的技术书籍,赶不上技术发展的潮流,一本书上市之后,引进到国内,一般至少要个半年时间。现在淘宝和京东上有很多原版进口书商,大多比较贵,而且很多时候也不是现货,这时候你可以考虑用下BookDepository。

BookDepository是一家英国网络书商,提供了海量书籍,向160个国家提供包邮服务,当然包括中国。它由亚马逊前员工创建,在2011年的时候又被亚马逊收购。对于我这种没有海淘经验的人来说,BookDepository极大提升了购物体验,下单付款之后,只需要在家等收件就行。

(更多…)

继续阅读 →

流量不好搞

几个月前搞了个公众号,尝试着去运营和输出内容。的确了解了很多公众号生态里的知识,也感觉到把一个公众号做起来还是挺难的,除了内容,你还要关心如何编写标题、如何排版、如何互动、如何涨粉、如何使用后台和使用第三方工具等等,其中还是涨粉最难。

昨天,我在大学时候的ACM群里宣传了下我的公众号,获得了一波关注,现在总共也才六十多个关注(不过质量都还挺高的,多年互联网经验的)。文章的阅读量最高的也才200(通过迁移给公众号添加留言功能),其他的平均阅读量也就二三十。偶尔会点赞,偶尔会有熟人赞赏。

与此同时,我也把部分文章都同步到了知乎上,有个知乎专栏JavaWeb实践之路,让我意外的是,一篇讲Oracle如何对JDK收费的文章(博客 知乎)阅读量爆炸,五天一共获得到一万多阅读,十几条评论,30个点赞,40个收藏。也许是真正点到读者的痛点,也许是知乎对首篇文章有增加曝光。知乎现在有将近三百个关注,可以利用起来。

因为总是想着去讨好读者,所以在内容方面会收到影响。比如一篇文章写的太深究于技术细节,那么看的人会少很多,如果是宽泛地介绍通用技术,阅读量会多一些,如果能写点小道消息或者讲讲故事,那就会引来很多转发和点赞。在博客上,我就无所谓了,想写啥写啥,毫无束缚,比如现在这篇就不会放到公众号里。接下来我还是会继续分享在项目里用到的一些基础Java Web知识,避免深究细节,避免出现长篇累牍的代码,力求通俗易懂,为读者提供价值。

你可以通过Feedly订阅本博客,或者扫描右侧的二维码关注,谢谢了~

继续阅读 →

数据库迁移工具Flyway

不管是在开发过程中还是在线上,数据库结构都是经常变化的,很多情况下都需要对数据库的变化做跟踪和管理,Flyway就是这样一款管理工具。

在Flyway里,每次数据库变化都称为一次迁移,每次迁移都有一个版本号。Flyway会在数据库里存储当前处在哪个版本。每当需要上线的时候,你可以手动或者自动地将代码里的多个迁移,同步到数据库当中。

迁移的规则

如图所示,文件名以V开头,后面跟上版本号,然后是两个下划线,最后是对此次迁移的描述,用下划线或者空格隔开。在每个sql文件中,都可以写多个DDL语句或者CRUD语句,根据你的需求而定。

怎么才能触发迁移呢?Flyway提供了多种方式:

(更多…)

继续阅读 →

使用Jackson生成和解析JSON

Jackson是目前使用非常广泛的JSON生成和解析工具。

Jackson项目主要由三个模块儿组成:

  • jackson-core 提供了一套流式API,他不仅自带了JSON的解析器和生成器,还支持扩展数据格式,比如XMLCSVProtobuf
  • jackson-annotations 提供了处理数据时需要的注解
  • jackson-databind 可以将数据和Java对象进行绑定,使用起来更方便、更符合直觉

通常来说,我们提到Jackson的时候,指的就是jackson-databind,他直接依赖了jackson-core和jackson-annotations。我们用Jackson的时候,通常也只是用来处理JSON,其他数据格式可以参考官网进行扩展。

(更多…)

继续阅读 →

用属性控制Hibernate生成DDL

Hiberate可以根据我们定义的@Entity实体类,来自动生成表结构,在一定程度上,你不需要与SQL打交道。在Spring Boot配合Hibernate使用的时候,可以定义属性来控制这种行为。如图所示:

可用的一些属性值
  • create表示每次应用启动的时候,都会将之前的表全部drop掉,重新根据实体类生成一遍。
  • create-drop在create的基础上,在应用关闭的时候还会drop一次。
  • update可能是比较常用的,每次启动的时候会看看实体类有什么变化,然后看需不需要更改表结构。
  • validate不会对表进行更改,但是会看看他和实体类是否对应
  • none什么都不做

除了这个属性之外,Spring Boot还有另外一个属性:

(更多…)

继续阅读 →

Oracle如何对JDK收费

今年4月16日,Oracle发布了新的JDK 8的更新,版本号为8u211和8u212。与以往不同的是,新版本的许可协议从BCL换成了OTN,这就意味着,你不能在生产环境使用这个版本了。如果你想继续使用8u211/8u212,或者之后发布的新版本,就需要给Oracle交钱了。

当然,并不是你用了新版本的JDK就要交钱,这个时候要区分私用和商用:

私用,是我总结的一个词,它包括”Personal Use”和”Development Use”,前者表示一些个人用途,比方说在自己的电脑上写一些小工具,做一些数据分析等等;后者表示开发用途,比如日常开发、做测试、做演示等等。商用不太好界定。我的理解就是拿来赚钱就是商用,比方说把网站部署到生产环境,在公司内部系统使用等。

我用的JDK使用什么协议?

BCL协议,即Oracle Binary Code License Agreement,协议规定你可以使用JDK,但是不能进行修改。私用和商用都可以,但是JDK中的某些商业特性,是需要付费才可以使用的。OTN协议,即Oracle Technology Network License Agreement,目前新发布的JDK用的都是这个协议,可以私用,商用需要付费。从下图可以看出各个版本对应的协议:

(更多…)

继续阅读 →

Spring Boot为什么不推荐使用JSP?

如果你在网上搜Spring Boot的教程,会发现模板引擎清一色用的Thymeleaf,为什么很少人用JSP?因为Spring Boot官方已经不推荐使用JSP了,文档中原话这么说的:

If possible, JSPs should be avoided. There are several known limitations when using them with embedded servlet containers.

Spring Boot 文档

在内置servlet容器中运行的时候,JSP会有一些限制:

  • 我们知道Spring Boot的打包方式有两种,一种jar包,一种war包。两种打包方式可以通过命令java -jar dist.jar或者java -jar dist.war运行。war包也可以单独部署在独立的Servlet容器(比如Tomcat,Jetty)中。使用jar包的时候不支持JSP,使用war包的时候支持
  • Undertow不支持JSP,话说Undertow国内用的比较少吧
  • 自定义的error.jsp不会覆盖Spring Boot默认的错误处理页面

既然如此,你如果需要使用JSP,就得打成war包,官方的代码仓库中自带有使用JSP的样例。当你需要迁移老项目到Spring Boot的时候,肯定会派上用场。

对于新项目,我的建议是你喜欢用哪个模板引擎,就用哪个。如果没有熟悉的,那就把FreeMarker、Groovy、Thymeleaf和Mustache全都看一遍,选择最合适的。

继续阅读 →

通过迁移给公众号添加留言功能

众所周知,18年3月份,腾讯关闭了新注册账户的留言功能,这样做让新开的公众号少了一个重要的和用户进行互动的渠道,而且官方也没有说到达什么要求之后可以开通。很多人通过添加小程序或者打开“阅读原文”引导用户去其他地方留言,这种方式是可行的,但是用户体验上可能差一点,没有那么直接。

然而添加官方留言并不是完全不可能,微信一直都有一个公众号迁移的功能,与其说是迁移,我更倾向于把它称之为合并,通过迁移功能,可以将两个公众号合并成一个。如果其中一个有留言功能,最后的账号就有留言功能。

哪种账号可以迁移?

我们假设A为需要迁移的账号(有留言功能),B为目标账号(想开通留言的账号)。A必须是验证过主体信息的订阅号或服务号,组织类的需要完成小额打款验证或法人验证或认证成功,个人主体的没要求。

B账号只能是验证过主体信息的组织类订阅号或服务号,个人订阅号不行。如果你有个人的订阅号,又从朋友那里搞来了个有留言功能的公众号,是没办法直接迁移到你的订阅号上的。

(更多…)

继续阅读 →

推荐下徐飞的专栏

最近在极客时间看了徐飞的专栏《技术与商业案例解读》,大概看了90%的文章,专栏里谈论了很多的西雅图和硅谷科技公司的兴衰故事,虽然很多公司以及人物之前都有所耳闻,但是对他们的了解却比较肤浅,这个专栏可以帮我我们开拓眼界,改善思维方式。

徐飞,浙大本科,佛罗里达大学博士,主要精通大数据领域,前微软和Tableau员工,现在在华为云。专栏里有很多是大数据相关的,除此之外,还有”亚马逊领导力准则”、”Dota帝国”、“从面试看企业文化”等一些文章,具体可以点击这里

每篇文章都有音频,非常适合上下班的路上听一听。

(更多…)

继续阅读 →