#Java

一直以来,写日常问题、前沿技术和架构思考类的文章比较多,今天为什么突然来说说Swing这个陈年老技术呢? 因为在CSDN上看到了这样的一篇文章: 可以看到作者对于学Swing还是挺愤怒的,不过确实Swing现在很少用了。但我的观点还不是那么绝对,因为从个人成长来说,Swing的学习确实给到了不少收获。开始也没打算专门来写篇文章说说看法,然后上了一下掘金,居然就又看到了这篇文章(强大的推荐机制): 开始看标题格式还以为是同一篇,仔细看才知道原来是驳前面那篇的,对于后面那篇的不少观点,个人还是比较认同的。 同时也因为作者的观点,联想到经常有读者跟我聊遇到职业瓶颈的问题,与我给出的建议有很多不谋而合的认识,所以还是想写一篇文章来说说。 首先,我尊重每个人对技术学习的观点,这里不评论到底谁对谁错,我就结合自己的学习和成长路径,谈谈这个问题的看法吧。如果屏幕前的你是正在读书的学生或是遇到...

一直关注Java的小伙伴想必或多或少听说过业界两位大佬,谷歌和甲骨文那场旷日持久的关于Java代码的侵权诉讼案,案件索赔高达近百亿美元。 事情的起因在于2010年甲骨文收购Sun之后获得了Java技术的一系列知识产权,随即起诉另外一位业界巨头谷歌,称其开发安卓系统时非法复制旗下子公司的Java api代码数万行。从而开始了一场十年的拉锯战: 2010 年,甲骨文起诉谷歌侵犯了与 Java 相关的专利和版权,初步索赔 80 亿美元; 2012 年 5 月,加州北区联邦法院裁定谷歌没有侵犯 Java 版权,Java API 不受版权保护;同年 10 月,甲骨文上诉至联邦巡回上诉法院。 2014 年,美国联邦巡回上诉法院推翻了一审部分结论,称必须尊重软件的版权保护,甲骨文赢得上诉,此案被发回重审。甲骨文此时将索赔提升至93亿美元。同年 10 月,谷歌申请美国联邦最高法院听审此案。 201...

前几日 Java 16 发布了,发现还是有童鞋不太了解Java目前的版本机制,所以看到了这样的留言: 那么为什么大家都还在用 Java 8 呢? 从这张图可以一目了然,大家平时最喜欢的是什么?当然是白嫖啦~ 而从JDK 8u211开始往后的版本,可都是需要商业收费的,所谓的商业收费,就是你自己开发程序使用不打紧,但是一旦当你开发的程序如果用于商业用途,也就是你的程序给你赚钱了,那此时此刻Oracle可是要跟你收费的,你的JDK的使用需要缴费获得授权才是合法的。 有的人会问,如果我不缴费直接用呢?当然,Oracle也是不知道这个事情的,天底下那么多程序员他不可能每个都时刻紧盯有没有付费。 不过万一你真的有那么点才华,你的产品越做越大,越被人熟知的话,总有一天树大招风会引起Oracle的注意,指不定哪天就来跟你打打知识产权的官司。毕竟这是Oracle的惯用手法了,小编毕业前在某视频网...

还记不记得求学时代各种复杂的数学公式?sin、log2、tan等等等,是不是看到这就觉得算起来麻烦? 通过MXReflection框架,你可以使用Java计算这些曾经我们觉得无比复杂的数学运算和函数,只需使用与类相关的字段。 MXReflection可以从指定字段读取值,并将结果注入@Expression注释字段。 <dependency> <groupId>com.github.ismail-mekni</groupId> <artifactId>mxreflection</artifactId> <version>1.0.1</version></dependency> 那如何使用这个框架呢? 很简单,只需要两个java注释。 1、通过@Arg值,我们可以指定要在目标...

前段日子在社群(点击加入)里看到有人讨论关于Service层接口的问题,DD也经常碰到周围的新人有问过一些类似的问题:一定要写个Service层的接口吗?Service层的接口到底用做什么用的呢?好像都没什么用啊? 我的看法Service层在业务逻辑不复杂的时候,似乎是没有什么用,但是随着应用迭代,业务逻辑变得复杂了之后,这一层是非常有用的。 主要表现在这几个方面: 1、更适合用来处理复杂的业务逻辑,可能会涉及多张表的操作,甚至还混杂着消息投递、接口调用等一系列的复杂综合性事务,这也是我们常说的事务管理所处的层次。 2、对表现层的复用支持,往往我们一个业务逻辑处理,不会单单只应用在一个API接口或页面上,如果直接把这部分内容写到Controller中,那当出现重复操作的时候就会产生复制黏贴,以后再要维护这段逻辑就麻烦了 3、对单元测试的支持,通过单独的一层service实现业务逻辑,...

当我们使用Spring Initializr来创建Spring Boot工程的时候,有没有发现在工程根目录下有两个名为mvnw的文件: 从命名、图标、扩展名来猜测,这两个文件的作用应该是一样的,只是cmd文件应该是用在windows下跑的,而另外一个则是用于linux环境下跑的。 那么这个文件到底是用来做什么呢?下面我们一起尝试了解一下: 第一步:打开读一下 因为内容较多,我这里就不放出来了。内容也非常易懂,只要你了解shell和maven,就能知道这个脚本主要做这几件事: 检测你是否有安装Maven,如果没有,就自动下载一个(这样才能完成后续的构建任务) 检查你是否有安装Java或者配置是否正确,这个无法自己完成,如果报错了,就要自己处理一下,比如JAVA_HOME没有,那就自己配置下。 检查否存在版本不兼容的情况,如果不兼容他会下载合适的版本来帮助你完成构建 更多检查的...

今天碰到群里小伙伴问,线上程序好像有多个不同版本的Netty包,怎么去看到底加载了哪一个? 在说如何看之前,先来说说,当你开始意识到项目里有多个不同版本的Jar包,都是因为遇到了这几个异常: java.lang.NoSuchMethodException:自己代码中调用了某个方法,因为加载了其他版本的jar,这个版本正好没这个方法。 java.lang.NoClassDefFoundError:编译时候是好的,但是运行的时候,因为加载的jar版本问题,没有这个类。 java.lang.ClassNotFoundException:在动态加载某个Class的时候,因为要加载的jar不是正确的版本,而导致找不到这个类。 当你在本地运行ok,但到服务器上发现出现这些错误的时候,就要意识到很可能是jar冲突了(有相同依赖存在多个版本)。这个问题往往也会有这样的表现:多实例部署的时候,有的...

JAVA枚举,比你想象中还要有用! 我经常发现自己在Java中使用枚举来表示某个对象的一组潜在值。 在编译时确定类型可以具有什么值的能力是一种强大的能力,它为代码提供了结构和意义。 当我第一次了解枚举时,当时我认为它们只是一个为常量命名的工具,可以很容易地被静态常量字符串ENUM_VAL_NAME所取代。 后来我发现我错了。事实证明,Java枚举具有相当高级的特性,可以使代码干净、不易出错,功能强大。 让我们一起来看看Java中的一些高级枚举特性,以及如何利用这些特性使代码更简单、更可读。 枚举是类!在Java中,枚举是Object的一个子类。让我们看看所有枚举的基类,Enum(为简洁起见进行了修改)。 public abstract class Enum<E extends Enum<E>> implements Constable, Comparab...

前言Java微服务能像Go微服务一样快吗? 这是我最近一直在思索地一个问题。 去年8月份的the Oracle Groundbreakers Tour 2020 LATAM大会上,Mark Nelson和Peter Nagy就对此做过一系列基础的的测试用以比较。接下来就给大家介绍下。 在程序员圈子里,普遍的看法是Java老、慢、无聊 ,而Go是快、新、酷 为了尽可能的进行一个相对公平的测试,他们使用了一个非常简单的微服务,没有外部依赖关系(比如数据库),代码路径非常短(只是操纵字符串),使用了小型的、轻量级的框架(Helidon for Java和Go工具包for Go),试验了不同版本的Java和不同的jvm。 对决双雄我们先来看下擂台两边的选手: 身穿深色战服的选手是JAVA Java是由被甲骨文收购的Sun Microsystems开发的。它的1.0版本是1996年发布的...

早上有个群友问了一个不错的问题:文件上传的单元测试怎么写?后面也针对后端开发要不要学一下单元测试的话题聊了聊,个人是非常建议后端开发能够学一下单元测试的。所以,今天特地拿出来写一篇说说,并不是因为这有多难写,而是作为出色的后端开发人员,单元测试如果你能考虑周到,那么从代码结构,程序质量上都会有很大的提升。而实际开发过程中,很少有开发人员会特别关注这个方面。 言归正传,下面我们具体说说当碰到需要上传文件的接口,我们要如何写单元测试! 先来回忆一下,普通接口的单元测试我们是如何写的?看看我们入门例子中的单元测试: @SpringBootTestpublic class Chapter11ApplicationTests { private MockMvc mvc; @Before public void setUp() { mvc = ...

还记得去年分享过一篇日期格式化使用 YYYY-MM-dd 的潜在问题的文章不? 历史又重演了… 事故现场我们来写个单元测试,重现一下这个问题。 测试逻辑: 创建两个日期格式化,一个是出问题的YYYY-MM-dd,另一个是正确用法yyyy-MM-dd 分别去格式化两个不同的日期:2020年12月26日(周六),2020年12月27日(周日) 具体代码如下: public class Tests { @Test public void test() throws Exception { SimpleDateFormat df1 = new SimpleDateFormat("YYYY-MM-dd"); SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd"); ...

昨晚看了几个老外分享的面试题,还挺有意思的。下面我们分两期来一起看看都是些怎么样的问题难到了老外?如果是你,是否可以都答对呢? 如果您对原文感兴趣,也可以通过这个链接查看:https://levelup.gitconnected.com/tricky-java-interview-questions-cfc546fd03ab Q1:下面Java代码的输出是什么?public class Test { public static void main(String[] args) { method(null); } public static void method(Object o) { System.out.println("Object method"); } public static void ...

最近知名开发工具供应商Jetbrains在Java 25周年之际,对开发群体做了一次有意思的数据分析。 全文内容可见:https://blog.jetbrains.com/idea/2020/09/a-picture-of-java-in-2020/ 通过这次的分析,得出了非常多意思的结论,接下来我们一起来快速看看,都有哪些有意思的现象出现! 有多少Java开发者? 专业Java开发人数约 520万 算上主要使用其他语言但也使用Java的开发人员约680万 Java开发者都在哪里? 亚洲最多,大约有250万 中国最多,韩国第二,分别占据了51%、50% 编程语言的使用占比根据2020年开发者生态系统调查,超过三分之一的专业开发者使用 Java 作为主要语言,Java 仍然是继 JavaScript 之后专业开发者使用的第二主要语言。 专家分析看到 JavaScri...

昨天被阿里云的这个酷炫大屏吸引了! 我等85后开发者居然这么少!挺好奇到底什么鬼东西都是90、95后在玩?就深入看了一下。 这是一个关于Serverless的体验活动,Serverless在国内一直都处于不温不火的状态,所以很多开发者其实都不太了解Serverless到底是啥! 如果你也有这样的好奇,那么可以跟我一样来体验一下,简单的写个Hello World,有个最直观的感受这个充满未来感产品吧! P.S. 参加活动,加入钉钉群还能每天抽奖一次,有机会赢取AirPods、高达PG模型(我喜欢的)、Cherry机械键盘等丰富大礼哦! 如何参与-【官方】活动主页:https://developer.aliyun.com/topic/yiqi/hol?utm_content=g_1000180354-【官方】通关宝典:https://help.aliyun.com/document_...

我最近给我fork的项目QuickTheories增加了一个接口: @FunctionalInterfacepublic interface QuadFunction<A, B, C, D, E> { E apply(A a, B b, C c, D d);} 这让非常好奇一个方法能够有多少个类型参数呢?据我所知,Java的语言规范并没有提到这个问题。1 关于在实现上这个阈值的定义,我有两个猜测: 编译器会强制一个可预测的阈值,例如255或者65535。 由于实现细节的原因,编译器的异常处理会施加意想不到的限制。 我不想通过我薄弱的C++技能来测试源代码,所以我决定直接来测试编译器2。我写了一个Python脚本,通过二分法找到一个会触发错误的最小值。完整的代码请见连接Github Repo。 最直接的办法就是生成方法。幸运的是,我们不必使用任...