手记
分享经验交流心得,学习前沿流行技术
-
利用semaphore的先V(release)再P(acquire)操作,实现线程的前置依赖关系。
import java.util.concurrent.Semaphore;import java.util.concurrent.ThreadLocalRandom;/** * 利用semaphore的先V(release)再P(acquire)操作,实现线程的前置依赖关系。 * semaphore的容量是0 */public class SemaphorePVDemo { public static void main(String[] args) { Semaphore semaphore1 = new Semaphore(0);
2925浏览
0推荐
0评论
-
比学习新技术更重要的是思维的改变
程序员是一个苦逼的行业,其中重要的一点就是行业专业知识更新的速度非常快,超过其他绝大部分行业,尤其是前台开发,这些天各种框架思想如雨后春笋层出不穷,有时候买了一本书,书还没有学完,技术可能已经更新或者被淘汰。那么,作为程序员的我们,怎么样才能不被爆炸的知识击昏,切实掌握真正属于自己的技术呢?从我个人的心得来说,学习技术应该重点学习那种新思想新角度的技术,并使用新的思维来写新学习的技术。大部分技术人员的问题不在于前者,而在于学习了新技术,却还是使用老的思维来写新技术,就好比用马拉火车一样,写者落泪看者伤心!举例,在前台开发中,MVVM框架的出现,相对于jquery天下的前台是一个非常大的改变,我们学习mvvm框架的时候,首先第一步要从思维上认识到这2种技术的不同,要理解数据驱动概念,理解 “jquery是死的,mvvm是活的” 这点,而不是只是把mvvm框架当作一个模板框架来使用。而在实际工作中,出现过有些水平较差的开发人员,还在使用jquery的思维来写vue的框架,结果是vue的好处没有享受到,整个开发部
3538浏览
8推荐
3评论
-
jdk10中stream流里面peek方法注意点
最近在我的课程里面SpringBoot2.0不容错过的新特性 WebFlux响应式编程里面,有学员提出了以下问题,在jdk10里面代码没有执行(课程中stream流是用jdk8演示的)代码:public class LambdaDemo { public static void main(String[] args) { IntStream.range(1,10).peek(LambdaDemo::debug).count(); } public static void debug(int i) { &nb
16161浏览
15推荐
1评论
-
测试人员应该具备的开发知识 - 记一次测试人员面试过程
本文中列的点都比较简单,主要针对刚刚做测试的菜鸟mm,开发人员可以跳过一般情况我只面试开发人员,但现在公司学互联网推全站工程师,所以现在测试的职位越来越少,很多时候是以全站工程师角色来应聘的,当然面试的时候不可能以全站工程师来面,主要还是面测试技能。整个面试的结果说实话并不是很理想,我个人觉得该测试人员的技术技能还比较薄弱。平时我和其他比较熟悉的做测试的人员沟通,发现很多人的基本开发技能也比较差,个人认为,如果你做测试,却没有基本的开发技能,后面的路会越来越难走,所以必要的开发技能还是需要的。在这里,根据我自己的开发校验,我列一下做为web测试人员,应该具备的开发技能:系统基本部署架构这是第一重要的知识,知道在浏览器点击请求之后发送了什么事情。重点需要知道nginx/apache是什么,做什么用?和tomcat什么关系?知道哪些请求是nginx处理,哪些是tomcat处理?了解http协议做web测试,如果对http协议没有比较全面的了解,那真是。。。知道http协议是什么知道报文(head加body)知道
7132浏览
13推荐
3评论
-
《程序员你为什么这么累?》晓风轻编码规范电子书打包下载
大家好,我是晓风轻,是《程序员你为什么这么累?》编码规范系列贴的作者,这系列帖里面讲解的怎么样定义接口和代码模板,怎么样把业务代码写简单清晰,特此整理成文档供大家参考。电子书格式包括pdf,mobi,epub格式,带完整目录。目录程序员你为什么这么累?导读接口定义常见问题Controller规范AOP实现日志打印异常处理参数校验和国际化工具类编写函数编写建议配置规范如何应对需求变更工程使用说明GITHUB地址电子书打包下载(pdf,mobi,epub格式)点击进入下载页面
6473浏览
12推荐
6评论
-
hashmap和hashcode和equals
今天在群里和大家讨论hashmap的原理,还有些人对方法的hashcode和equal有疑问。花了点时间,简单写了一个demo。 如果hashmap的key是自己定义的对象。 package io.github.xwjie; public class User{ // FIXME ID 应该加final private long id; public long getId() { return id; } public void setId(long id) { this.id = id; } public User(long id) { this.id = id; } @Override public int hashCode() { return Long.hashCode(this.id); } @Ov
2980浏览
2推荐
1评论
-
程序员你为什么这么累? - 如何应对需求变更
导读:程序员你为什么这么累? 接口定义规范 controller规范 日志规范 异常处理规范 国际化和参数校验规范 工具类规范 函数编写建议 配置建议 如何应对需求变更 如何应对需求变更 我之前的文章 程序员你为什么这么累? 中,我个人观点是加班原因是编码质量占了大部分因素,但是不少同学都不认为是代码质量导致的加班,都认为是不断的需求改动导致的加班。这位同学,说的好像别人的需求就不会变动似的!谁的需求不改动啊?不改动的能叫需求吗?哈哈。 先看个程序员的段子娱乐一下
4154浏览
12推荐
2评论
-
程序员你为什么这么累? - 配置规范
导读:程序员你为什么这么累? 接口定义规范 controller规范 日志规范 异常处理规范 国际化和参数校验规范 工具类规范 函数编写建议 配置建议 配置规范 工作中少不了要制定各种各样的配置文件,这里和大家分享一下工作中我是如何制定配置文件的,这是个人习惯,结合强大的spring,效果很不错。 需求 如我们现在有一个这样的配置需求,顶层是Server,有port和shutdown2个属性,包含一个service集合,service对象有name一个属性,并包含一个connector集合,connector对象有port和proto
3805浏览
10推荐
1评论
-
从一道题目看享元设计模式
用JDK的一个小特性、小代码来理解一个模式。 刚刚工作的时候看设计模式,编程功底太薄弱,看着例子简单,看完却感觉什么也没有学到,尤其是一些比较少见的设计模式。最近看到一条题目,想到之前设计模式里面的享元模式,特分享给大家看看。 public class IntegerDemo { public static void main(String[] args) { Integer a1 = 127; Integer a2 = 127; System.out.println(a1 == a2); Integer a3 = 129; Integer a4 = 129; System.out.println(a3 == a4); }
2725浏览
9推荐
0评论
-
程序员你为什么这么累? - 函数编写建议
导读:程序员你为什么这么累? 接口定义规范 controller规范 日志规范 异常处理规范 国际化和参数校验规范 工具类规范 函数编写建议 配置建议 傻瓜都能写出计算机可以读懂的代码,只有优秀的程序员才能写出人能读懂的代码! 在我看来,编写简单的函数是一件简单又困难的事情。简单是因为这没有什么技术难点,困难是因为这是一种思维习惯,很难养成,不写个几年代码,很难写出像样的代码。 大部分的程序员写的都是CRUD、一些业务逻辑的代码,谁实现不了?对于我来说,如果业务逻辑的代
3591浏览
4推荐
0评论
-
程序员你为什么这么累? - 工具类编写
导读:程序员你为什么这么累? 接口定义规范 controller规范 日志规范 异常处理规范 国际化和参数校验规范 工具类规范 函数编写建议 配置建议 一个项目不可能没有工具类,工具类的初衷是良好的,代码重用,但到了后面工具类越来越乱,有些项目工具类有几十个,看的眼花缭乱,还有不少重复。如何编写出好的工具类,我有几点建议: 隐藏实现 就是要定义自己的工具类,尽量不要在业务代码里面直接调用第三方的工具类。这也是解耦的一种体现。 如果我们不定义自己的工具类而是直接使用第
4539浏览
14推荐
2评论
-
什么才是java的基础知识?
原文地址 https://zhuanlan.zhihu.com/p/28615617 近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考。 我做j2ee开发已经超过十载,作为过来人,心路历程估计和大家差不多。编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑)。但同时自己心里明白,自己其实没有
15025浏览
103推荐
14评论
-
程序员你为什么这么累? - 参数校验和国际化
导读:程序员你为什么这么累? 接口定义规范 controller规范 日志规范 异常处理规范 国际化和参数校验规范 工具类规范 函数编写建议 配置建议 今天我们说说参数校验和国际化,这些代码没有什么技术含量,却大量充斥在业务代码上,很可能业务代码只有几行,参数校验代码却有十几行,非常影响代码阅读,所以很有必要把这块的代码量减下去。 今天的目的主要是把之前例子里面的和业务无关的国际化参数隐藏掉,以及如何封装好校验函数。 修改前代码 controller代码 /** * !!!错误范
3293浏览
8推荐
0评论
-
程序员你为什么这么累? - 异常处理规范
导读:程序员你为什么这么累? 接口定义规范 controller规范 日志规范 异常处理规范 国际化和参数校验规范 工具类规范 函数编写建议 配置建议 对于大型IT系统,最怕的事情第一是系统出现了异常我不知道,等问题闹大了用户投诉了才知道出问题了。第二就是出了问题之后无法找到出错原因。针对这2个问题,说说我们项目组是怎么样规定异常处理的。 再次声明我的观点,我这系列贴里面,没有什么技术点,都是一些编程的经验之谈,而且是建立在项目背景是大部分代码都是简单的CRUD、开发人员
4723浏览
14推荐
2评论
-
程序员你为什么这么累? - 日志规范
导读:程序员你为什么这么累? 接口定义规范 controller规范 日志规范 异常处理规范 国际化和参数校验规范 工具类规范 函数编写建议 配置建议 开发中日志这个问题,每个公司都强调,也制定了一大堆规范,但根据实际情况看,效果不是很明显,主要是这个东西不好测试和考核,没有日志功能一样跑啊。 但编程活久见,开发久了,总会遇到“这个问题生产环境上能重现,但是没有日志,业务很复杂,不知道哪一步出错了?” 这个时候,怎么办? 还能怎么办,发个版本,就是把所有地方加上日志
3678浏览
10推荐
3评论
-
程序员你为什么这么累? - Controller规范
导读:程序员你为什么这么累? 接口定义:程序员你为什么这么累? - 接口定义 第一篇文章中,我贴了2段代码,第一个是原生态的,第2段是我指定了接口定义规范,使用AOP技术之后最终交付的代码,从15行到1行,自己感受一下。今天来说说大家关注的AOP如何实现。 先说说Controller规范,主要的内容是就是接口定义里面的内容,你只要遵循里面的规范,controller就问题不大,除了这些,还有另外的几点: 1 所有函数返回统一的ResultBean/PageResultBean格式 所有函数返回统一的ResultBean/Pag
6230浏览
18推荐
1评论
-
一道代码评审题
今天在qq的java群里面,有同学贴了一道代码评审题 这块看上去写得还可以的代码,我说说个人的看法 问题1:最大的问题就是方法名,这个函数实际上是有数据操作的,不应该叫getXXX,给人一种人畜无害的感觉。调用者不会想到里面把数据改了。 问题2: 【可能】存在的空指针异常。order可能为空,是否必须要加空判断呢?我的意见是不一定。具体原因见此贴:我的编码习惯 - 异常处理 问题3: 魔法数字0和1 问题4:没有日志,我个人建议,数据操作还是应该带上日志,方便跟踪。如果真的只是查询
2494浏览
5推荐
2评论
-
说说同步异步和水平扩展垂直扩展
关于水平扩展和垂直扩展,很多同学应该都听过这2个概念,在系统架构里面经常说到,“架构要灵活,要能支持水平扩展和垂直扩展,巴拉巴拉。。。”,话每个人都会说,那么讲究什么是水平扩展什么是垂直扩展,关键是什么,如何能做到呢? 今天简单说说个人的理解。 打个比喻,假设现在有一堆的任务完成不了,当前的生产力无法完成,需要扩展的话,那么简单来说,水平扩展就是加人,垂直扩展就是加班l。人不够,加人就是水平扩展,那么加人肯定是比较简单的,一个人做不完就2个,2个不够就10个,总
4582浏览
7推荐
1评论
-
程序员你为什么这么累?- 接口定义规范
导读:程序员你为什么这么累? 工作中,少不了要定义各种接口,系统集成要定义接口,前后台掉调用也要定义接口。接口定义一定程度上能反应程序员的编程功底。列举一下工作中我发现大家容易出现的问题: 1. 返回格式不统一 同一个接口,有时候返回数组,有时候返回单个;成功的时候返回对象,失败的时候返回错误信息字符串。工作中有个系统集成就是这样定义的接口,真是辣眼睛。这个对应代码上,返回的类型是map,json,object,都是不应该的。实际工作中,我们会定义一个统一的格式,就是Res
9358浏览
22推荐
6评论
-
程序员你为什么这么累?
大家一提到程序员,首先想到的是以下标签:苦逼,加班,熬夜通宵。但是,但凡工作了的同学都知道,其实大部分程序员做的事情都很简单,代码CRUD可以说毫无技术含量,就算什么不懂依葫芦画瓢很多功能也能勉强做出来,做个多线程并发就算高科技了,程序员这行的门槛其实还是比较低的。(这里说的是大部分,有些牛逼的,写算法、jvm等的请自动跳过) 是不是觉得很矛盾,一方面工作不复杂,一方面却累成狗。有没有想过问题出在哪里?有没有想过时间都花在哪里呢? 对于我个人来说,编码还是一个相
10638浏览
34推荐
6评论
-
使用jdk8 stream 统计单词数
在我的SpringBoot2.0不容错过的新特性 WebFlux响应式编程里面,有同学问如何使用stream统计单词数。这是个好例子,也很典型,在这里补上。 下面的例子实现了从一个文本文件读取(英文)文本并统计单词数的功能。 package com.imooc; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; /** * 使用stream统计文章单词数 * * @author 晓风轻 * */ public class StreamWordDemo { public static void main(String[] args) throw
5356浏览
7推荐
1评论
-
springboot2 webflux 响应式编程学习路径
springboot2 已经发布,其中最亮眼的非webflux响应式编程莫属了!响应式的weblfux可以支持高吞吐量,意味着使用相同的资源可以处理更加多的请求,毫无疑问将会成为未来技术的趋势,是必学的技术!很多人都看过相关的入门教程,但看完之后总觉得很迷糊,知其然不知道其所以然,包括我本人也有相同的疑惑。后面在研究和学习中发现,是我的学习路径不对,很多基本概念不熟悉,之前公司主打的jdk版本还是1.6/1.7,直接跳到运行在jdk8上的webflux,跨度太大,迷惑是在所难免的! 在这里我个人推荐的
18364浏览
27推荐
6评论