利用工具提高工作效率,提高工作效率的编程软件

  利用工具提高工作效率,提高工作效率的编程软件

  你还在因为加班熬夜而秃顶吗?你还在因为外来需求造轮子吗?那你就找对人了!本文亲身感受程序员之痛,默默吐血背后整理一篇文章,希望对大家有所帮助。快走快走。

  如何解决写爬虫IP受阻的问题?立即使用。

  作为一个程序员,每天面对的就是写代码和吹牛。但是我总觉得这两件事还没有达到一个平衡点。总觉得每天花太多时间写代码,没有太多时间给自己吹。不知道大家有没有这些疑问和疑惑?

  我们知道程序员是最懒的生物!嘿!那么问题来了,那为什么钓鱼时间还这么少呢?我们是不是太坏了?不不不要低估自己。原因是什么?

  答案当然是你还没有看过这篇文章。本文亲身感受程序员的痛苦,背后默默吐血整理一篇文章。现在分享给你,希望对你有帮助。

  

目录

  整体预览图

  JSON解析工具

  HTTP网络请求工具

  字符串处理工具

  集合处理工具

  文件流处理工具

  加解密工具

  JAVA bean 对象转换工具

  缓存和限流工具

  

开始上手

  

整体预览图

  本文将从图中对触发器进行分类,介绍相关工具包,并简单介绍其用途。由于本文篇幅有限,仅作为引言。细节还是要在你写代码的时候慢慢理解。

  

JSON 解析工具

  json开发中的解析工具有多常见?我不需要多说。可以说是程序员每天都会用到的工具,这也是我把它放在首位的原因。我们来看看,总结一下,用起来,走!我用的是Fastjson,这是一个JSON解析的工具,用法相当简单。

  1、阿里开源

  属国

  groupIdcom.alibaba/groupId

  artifactIdfastjson/artifactId

  版本1 . 2 . 83/版本

  /依赖性2:maven 导入 pom 坐标

  下面看怎么使用字符串和JSON相互转换//字符串到对象

  en student=JSON . parse object( { name :晓明,年龄:18} ,student . class);

  //对象到字符串

  String str=JSON.toJSONString(学生);实体对象字符串被转换为JSON。//字符串被转换为JSONObject对象。

  JSON JSON object=JSON object . parse object( { name :晓明,年龄:18 } );

  //JSONObject对象转换为字符串

  string str=JSON object . tojsonstring();JSONObject字符串转换成JSON//定义解析字符串。

  String studentListStr=[{name :晓明,年龄:18},{name :小牛,年龄:24 }];

  //解析为ListStudent

  list student student list=JSON . parse array(studentListStr,student . class);

  //定义解析字符串

  StudentMapstr= {name :晓明,年龄:18 } ;

  //解析为MapString,String

  MapString,stringStringMap=

  JSON object . parse object(studentMapStr,new TypeReferenceMapString,String(){ });集合类就这样。这里只是简单介绍一下用法,fastjson。还有更多用法等着你~ ~

  

HTTP 网络请求工具

  除了更加详细的用法请参考官方的文档,作为一名优秀的互联网工作者,如果不学习如何进行在线请求,如何在这个行业有一席之地?JSON 工具你值得拥有~ ~根据个人意愿,我简单介绍一下HTTP 网络请求工具的用法,因为我比较熟悉。

  1、httpclient

  2、maven 导入 pom 坐标

  如何使用/**

  *不带参数的GET请求

  */

  公共静态void noArgsGetHttp()引发IOException {

  //定义httpclient

  closeable http client http client=http client builder . create()。build();

  //创建httpGet

  http get http get=new http get( http://www . Baidu . com );

  //定义返回的结果

  CloseableHttpResponse execute=null;

  //发送执行

  execute=http client . execute(http get);

  //获取返回值

  HttpEntity entity=execute . get entity();

  System.out.println(响应状态为: execute . getstatusline());

  if (Objects.nonNull(entity)) {

  System.out.println(响应内容长度为: entity . getcontentlength());

  System.out.println(响应内容为:实体实用程序。tostring(实体));

  }

  //释放资源

  if (httpClient!=null) {

  http客户端。close();

  }

  如果(执行!=null) {

  执行。close();

  }

  }GET 请求(无参)/**

  * 有参的得到请求

  */

  公共静态void haveArgsGetHttp()抛出IOException,URISyntaxException {

  //定义客户端

  可关闭的http客户端http客户端=http客户端生成器。创建().build();

  //创建参数列表

  ListNameValuePair valueParamsList=new ArrayList();

  valueparamslist。add(新的基本名称值对( studentId , 1 ));

  //创建对应请求上呼吸道感染

  URI uri=新的URIBuilder()。setScheme(http )。setHost(localhost )。setPath(/getStudentInfo )。setParameters(valueParamsList)。build();

  //根据上呼吸道感染创建请求

  HttpGet httpGet=新http get(uri);

  //定义返回结果

  CloseableHttpResponse execute=null;

  //发送执行

  execute=http客户端。执行(http get);

  //获取返回值

  HttpEntity实体=执行。获取实体();

  System.out.println(响应状态为:执行。getstatusline());

  if (Objects.nonNull(entity)) {

  System.out.println(响应内容长度为:实体。get contentlength());

  System.out.println(响应内容为:实体实用程序。tostring(实体));

  }

  //释放资源

  if (httpClient!=null) {

  http客户端。close();

  }

  如果(执行!=null) {

  执行。close();

  }

  }GET 请求(有参)/**

  *邮政有参数

  */

  公共静态void haveArgsPosthttp()抛出IOException {

  //获得超文本传送协议(超文本传输协议的缩写)客户端(可以理解为:你得先有一个浏览器;注意:实际上客户端与浏览器是不一样的)

  可关闭的http客户端http客户端=http客户端生成器。创建().build();

  //创建邮政请求

  http post http post=new http post( http://localhost:12345/post test );

  JSONUtil .学生学生=新JSONUtil .学生();

  student.setName(潘晓婷);

  学生。setage(18);

  字符串JSON字符串=JSON。tojsonstring(学生);

  string entity entity=新的字符串实体(JSON string, UTF-8 );

  //发布请求是将参数放在请求体里面传过去的;这里将实体放入邮政请求体中

  httpPost.setEntity(实体);

  http帖子。set header( Content-Type , application/JSON;charset=utf8 );

  //响应模型

  可关闭的httpresponse响应=http客户端。执行(http post);

  //从响应模型中获取响应实体

  HttpEntity响应实体=响应。获取实体();

  System.out.println(响应状态为:响应。getstatusline());

  if (responseEntity!=null) {

  System.out.println(响应内容长度为:响应实体。get contentlength());

  System.out.println(响应内容为:实体实用程序。tostring(响应实体));

  }

  //释放资源

  if (httpClient!=null) {

  http客户端。close();

  }

  如果(回应!=null) {

  回应。close();

  }

  }啊!这样一步一步总结下来好累啊,看到这里的小伙伴们,点一下手里的小赞。嘿嘿~~ 当然我只是简单介绍一下POST 请求(有参数)的使用,具体高深的使用方法和配置可以参考其他博主的详细介绍,让我们介绍下一个常用的工具吧。

  

字符串处理工具

  httpClient使我们开发中最常见的类型,也是我们最常需要操作的类型了。字符串

  如果不知道字符串的常用工具,那在写代码的时候简直就是场灾难!!!等等。

  字符串判空,截取字符串、转换大小写、分隔字符串、比较字符串、去掉多余空格、拼接字符串、使用正则表达式给我们提供了非常丰富的选择。我们着重以本类来介绍使用。

  1、StringUtils

  属国

  groupId组织。阿帕奇。commons/groupId

  artifactId commons-lang 3/artifactId

  版本3 .12 .0/版本

  /依赖性2:导入maven坐标

  常用方法介绍字符串判空(isNotBlank

  string str=

  //是否不为空

  布尔型res1=字符串实用程序。isnotblank(str);

  //是否为空

  布尔型res2=字符串实用程序。为空(字符串);isBlanK)(isNotEmpty

  string str=

  //是否不为空

  布尔型res1=字符串实用程序。is notempty(str);

  //是否为空

  boolean res2=string utils . isempty(str);isEmpty)String str2=1,2,3 ;

  string[]split=string utils . split(str 2);

  system . out . println(arrays . tostring(split));分隔字符串 —— split ——给定一个字符串,可以用isNumeric方法判断它是否是纯数。

  string str 3=“1”;

  布尔数值=string utils . isnumeric(str 3);

  System.out.println(数值型);当然,除了以上三个简单的方法,这个工具类还有很多其他方法对我们非常有用,这里就不举例了。感兴趣的朋友可以看看源代码进行统计。

  

集合相关处理工具

   Oh-ho ~ ~看完了string的常用工具,最重要的收藏来了。如果说我们的程序没有字符串就不能运行,那么没有集合,我们就每天加班加点。出去后,我们会自豪地说,老板的汽车轮胎我也出力了。

  判断是否纯数字 —— isNumeric ——

  

Collections

  是既然集合工具这么重要,那么当然要重点介绍。学会相关工具的使用,真的是能让我们事半功倍的,真的是能让摸鱼时间大大增加的,不信你看看。的收集套件,里面包含了很多常用的方法。下图是其中的一些,吃起来很方便!

  JAVA在我们的日常开发工作中,经常会遇到一些集合排序的需求。排序—— sort——可以帮助我们做好这一点。

  list integer list=new ArrayList();

  list . add(2);

  list . add(1);

  list . add(3);

  //升序排列

  collections . sort(list);

  system . out . println(list);

  //降序排列

  collections . reverse(list);

  system . out . println(list);sort获取最大最小值 —— max / min ——是我们操作藏品最常见的方式!最大值最小值,有现成的方法帮我们实现。

  //最大值最小值

  list integer int list=new ArrayList();

  int list . add(1);

  int list . add(2);

  int list . add(3);

  integer max=collections . max(int list);

  integer min=collections . min(int list);

  System.out.println(集合元素的最大值: max );

  System.out.println(集合元素的最小值: min );Collections在多线程状态下,转换线程安全集合—— synchronizedList ——的并发加法,比如普通集合会产生并发问题,会导致空值。这时候不想改变之前的设定怎么办?我们可以简单的通过ArrayList的线程安全转换,简单一行代码就可以完成!是不是很方便!

  list integer synchronized list=collections . synchronized list(int list);当然,Collections还有很多有用有趣的方法等着我们去探索,只是一个引玉的效果,就不多赘述了。

  

CollectionUtils

  我最常用的是Collections,是CollecionUtils的开源工具包。它的功能可以说是相当强大了。不信你可以往下看。反正它基本上有你能想到的所有集合运算。

  apache集合判空—— isNotEmpty——

  ListString string list=new ArrayList();

  boolean notEmpty=collection utils . isnotempty(string list);

  System.out.println(集合不是空的吗?notEmpty);我们最常用的集合方法,没有之一,必须掌握它!!在开发中,经常需要对多套进行交集/并集/补集/差集——,所以不是傻乎乎的子集编写循环!还会有时间钓鱼吗?下面是大大提高效率的工具!

  list integer list 1=new ArrayList();

  list 1 . add(1);

  list 1 . add(2);

  list 1 . add(3);

  list integer list 2=new ArrayList();

  list 2 . add(3);

  list 2 . add(4);

  //获取联合

  collection integer union=collection utils . union(list 1,list 2);

  system . out . println(union);

  //获取交集

  collection integer intersection=collection utils . intersection(list 1,list 2);

  System.out.println(交集);

  //获取交集的补集

  CollectionInteger析取列表=CollectionUtils .析取(list1,list 2);

  System.out.println(析取列表);

  //获取差异集

  collection integer subtract=collection utils . subtract(list 1,list 2);

  system . out . println(subtract);交并补等的数学操作//确定两个集合是否相等

  list integer list 3=new ArrayList();

  list 1 . add(3);

  list 1 . add(4);

  list integer list 4=new ArrayList();

  list 2 . add(3);

  list 2 . add(4);

  布尔型equal collection=collection utils . isequalcollection(list 3,list 4);

  System.out.println(两个集合相等吗? equal collection);

Lists

  最后在集合的工具类中加入一个判断两集合是否相等——isEqualCollection——官方java包,里面包含了很多我们想不到的超级方便的小工具。既然是指集合,那就说说里面的google类吧,也是超级好用的!

  Lists相信大家在开发中都有过初始化集合的需求!然后,我们一般会创建一个ArrayList,一个一个的添加进去。现在,让我告诉你,你不必这么麻烦。创建数组列表并初始化它的一种方法是。多么甜蜜的警告!

  //快速初始化集合

  ArrayListInteger integers 1=lists . new ArrayList(1,2,3);

  system . out . println(integer 1);快速初始化集合——newArrayList——有时候我们想把自己的大集合分散成一些小集合,但又不想手动去做。我们做什么呢一定有人帮我们解决了这些痛点!来,我给你介绍一下!

  //数组分页

  ArrayListInteger list 7=lists . new ArrayList(1,2,3,4,5,6,7,8,9,10);

  ListListInteger partition=lists . partition(list 7,5);

  System.out.println(分区);在介绍了集合相关的操作类之后,我们再来介绍一下开发中经常用到的文件流相关的操作。

  

文件流处理工具

  我相信我们在工作中很无聊,经常写** IO流集合分页——partition——InputStream相关的类了吧。经常简单的读取和写入一个文件,我们需要大费周章的去定义一些Output Stream * *,等等。这让我们有一种杀鸡取卵的感觉。介绍了一个文件操作工具类,节省了大量的操作和关闭行为。超级好用,但是我经常用。

  最常用的操作,怎么很简单?只用一行代码,秒杀!

  //将测试写入test.txt文件

  FileUtils.writeByteArrayToFile(新文件( C:\Users\test.txt ), test )。getBytes());将信息写入文件——writeByteArrayToFile——知道怎么把东西写到档案里,我们还得知道他的好兄弟怎么看!

  //读取test.txt文件

  byte[]bytes=fileutils . readfiletobytearray(new File( D:\ Users \ test . txt );

  System.out.println(读取的文本为:新字符串(字节));API有很多,不能一一给大家介绍。深入了解需要你去熟练运用,看公文查漏补缺是否正确。相信你也能看到很多神奇的方法。

  

加解密工具类

  通常我们会经常遇到加密用户密码从文件读取信息——readFileToByteArray——,验证接口(MD5)签名等加密场景。虽然加密场景不多,但是为什么不要有这样的工具呢?

  因为常用的加密方法不多,这里给大家介绍两种方法。想了解更多其他用法的,自己去探索吧。

  //MD5加密

  string MD5=digestutils . MD 2 hex( 123 );

  System.out.println(加密结果: MD5 );

  //sha(安全哈希算法)加密

  string sha 256 hex=digestutils . sha 256 hex( 123 );

  System.out.println(sha256加密: sha 256 hex );

JAVA bean 对象转换工具

  说了这么多,还是说说对象转换的工具吧。有一些规范正在开发中,如DTO、DO、VO等。在它们之间,如果我们需要转换,我们只需要一个接一个地设置值。真的是苦差事。

  

BeanUtils

  (sha256)这里介绍两个相关的转换。一个是大家都很熟悉的java bean对象,一个是我平时开发用的BeanUtilsMapStruct。最常见的是对象的复制。BeanUtils

  学生学生=新生();

  Student.setName(晓明);

  student . setage(18);

  学生newStudent=新学生();

  bean utils . copy properties(student,new student);

  system . out . println(new student);

MapStruct

  接下来,我们重点来看不过面对需要深拷贝的对象大家要注意了,这里并不推荐大家使用此工具去实现的改造。MapStruct是lout,只能映射属性,或者属性相同的情况下,允许映射的属性更少。

  但是,当映射的属性数据类型或映射的字段名称被修改时,映射将失败。而BeanUtils是个聪明的老婆。

  她心思细腻,把我们可能遇到的各种情况都考虑到了(要是能找到这样的老婆就好了,她在内心嘲笑猪的声音)

  1、mapstruct

  属国

  groupIdorg.mapstruct/groupId

  !-使用JDK 8下的mapstruct

  artifactIdmapstruct-JDK 8/artifactId

  version1.2.0.Final/version

  /依赖关系

  属国

  groupIdorg.mapstruct/groupId

  artifactIdmapstruct-处理器/artifactId

  version1.2.0.Final/version

  /依赖性2:首先啥都不用想上来我们先把该导的包导进去

  用一下对象之间字段完全相同

  @数据

  @AllArgsConstructor

  @NoArgsConstructor

  公共课学生{

  私有字符串名称;

  私有整数年龄;

  }

  @数据

  @AllArgsConstructor

  @NoArgsConstructor

  公共课教师{

  私有字符串名称;

  私有整数年龄;

  }第一步:定义好我们的基础类

  @Mapper

  公共接口UserCovertToTeacher {

  UserCovertToTeacher INSTANCE=mappers . get mapper(UserCovertToTeacher . class);

  教师转换(学生学生);

  }第二步:接下来定义一个接口,但是注意不需要实现,他就呢能够帮我们转化很神奇的

  学生学生=新生();

  Student.setName(晓明);

  student . setage(18);

  教师teacher=UserCovertToTeacher。INSTANCE.toCovert(学生);

  System.out.println(教师);最后一步:在代码中调用,聪明的小伙伴看下面代码,一下就明白了,就是这么简单我们介绍了两个类的字段完全相同的情况。那么,对象之间字段存在不相同情况对我们来说就更麻烦了。

  先提前介绍一下如何处理这种不同参数名的对应,目前是有多个字段名字不同但是有对应关系应该怎么搞呢?

  @数据

  @AllArgsConstructor

  @NoArgsConstructor

  静态类WeiXin{

  私有字符串用户名;

  私有整数年龄;

  }但是我们发现上面的学生类的name参数名和我们的不一样。它如何与过去相对应?假设我们新定义一个微信类,我们的学生要注册到微信上,我们就要将学生对象转化为微信对象

  @Mapper

  公共接口UserCovertToWeinxin {

  UserCovertToWeinxin INSTANCE=mappers . get mapper(UserCovertToWeinxin . class);

  //配置字段映射规则

  @Mapping(源=名称,目标=用户名)

  BeanUtilTest。微信to cover(BeanUtilTest。学生学生);

  }学生学生=新生();

  Student.setName(晓明);

  student . setage(18);

  WeiXin WeiXin=UserCovertToWeinxin。INSTANCE.toCovert(学生);

  System.out.println(微信);这么简单的两个例子,不可能包含答案就是在对方法上配置这么强大的功能。不管是MapStruct都可以一个一个做。只是限于这篇文章,不能跟你说。想想就心酸!不过还是那句话,抛砖引玉!剩下的就留给聪明的朋友吧!

  

缓存和限流器工具

  最后一节,我给大家带来我的收藏。壁橱底下的东西要拿出来了。请抓紧点赞收藏。记住,错过了就没有下一家店了。

  我也在日期格式化、还是表达式解析、还是深拷贝找到了很多有用的工具。首先,我介绍了缓存工具。在开发中,我们经常定义一个映射来存储内存缓存。但是,简单的地图只能存储和检索,却真的做不到。它涉及复杂的操作,如缓存过期、缓存过时和相关通知。

  我们有必要学习掌握一个工具,可以缓存010到59000以上所有情况。有需要就有工具类,时刻记住。guava在台上,和往常一样。先看看效果如何。

  

Cache

  Cover

  CacheString,String cache=cache builder . new builder()。expireAfterWrite(10,时间单位。秒)。build();

  //放在缓存中

  Cache.put(小明,活着);

  thread . sleep(10000);

  //从缓存中获取值

  system . out . println(cache . getifpresent(晓明));看,结果很明显。如果超过了缓存时间,就会自行释放。嘿嘿。

  Cache

  定义一个简单定时过期的缓存定义一个缓存符合以下限制:限制访问并发cache String,String cache=cache builder . new builder(),

  //最大容量,超过了LRU的淘汰量。最大尺寸(100)

  //初始容量。初始容量(10)

  //并发级别10。并发级别(10)。expireAfterWrite(10,时间单位。秒)。build();两个小例子,你懂吗?真正的干货不要用的太快。

  除此之外,通常还需要一个限流器。我们不可能自己写一个限流器。要考虑的事情太多,表现不好!然后使用接下来介绍的这个工具。

  

RateLimiter

  限流器经常在并发场景中遇到。实现限流器最简单的方法是设置初始化容量。原理很简单,但具体实现很复杂。限制缓存数量上限帮助我们解决了这个问题,我们只需要调用令牌桶算法就可以实现并发限流器。

  RateLimiter

  rate limiter rate limiter=rate limiter . create(1,1,TimeUnit。秒);并发两个来得到它,看看结果。符合我们的预期吗?

  新线程(()-{

  System.out.println(线程1获得执行权限了吗?rate limiter . try acquire());

  }).start();

  新线程(()-{

  System.out.println(线程2获得执行权限了吗?rate limiter . try acquire());

  }).start();怎么样?只有一个通行证吗?一个简单的例子说明了这个问题。具体用法需要大家在实际开发中的具体体验,我这里就不多BB了!节省时间。我们去练习吧。努力成为API调用高手。

  

修炼完成

  API定义限流器,每1秒钟通过 1 个请求经过上面这么多的讲解、案例和对知识的思考,相信大家已经初步掌握了线程池的使用方法和细节,以及对原理运行流程的掌握,

  (学习视频分享:编程基础视频)以上是【整理分享】8种提高工作效率再也不加班的开发工具!更多详情请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: