![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 73
林老师带你学编程
www.wolzq.com
展开
-
超大CSV文件如何最快速度解析
超大文件解析指南原创 2023-04-02 16:30:46 · 1399 阅读 · 1 评论 -
看完,你也能用多线程让接口提升5倍速!
一、应用场景酒店提供给各个渠道商房间价格是不一样的,我们需要轮询所有的渠道商接口,给用户返回一个最低的价格,前端会将这个价格显示给用户。二、接口要求实时查询去哪儿、携程、飞猪、艺龙、同程等渠道的今日房价,计算并返回当日最低价。三、接口难点去哪儿、携程、飞猪、艺龙、同程因为是走外网,网络会有一定的延迟。如果同步一个个获取价格数据,接口会很慢。四、实现4.1 简单实现循环调用各个渠道今日房价,对比每个渠道价格,计算并返回最低价格。package com.fourkmiles原创 2021-04-02 19:58:51 · 608 阅读 · 0 评论 -
开发神器,拿走不谢【Java8 Stream】
每一种开发语言都提供了丰富的工具库,作为当今最流行的的开发语言之一,Java肯定也不例外。但是今天不讲Java集合工具类,我们来讲讲Java8的特性之一 Stream。用好Stream,可以极大提高我们的开发效率,好了开始今天的课程~java8流操作来自林老师带你学编程00:0000:46收录于话题#java2个一、循环过滤我们平常开发最经常使用的就是循环、排序、统计之类的,下面我们以一个实际的例子来演示说明。从一个List过滤空字符串并输出不含空字符的数据List<Stri原创 2021-02-09 16:46:16 · 2914 阅读 · 1 评论 -
一个${}引发的惨案【MyBatis】
想必大家在MyBatis开发过程中,对#{}和${}符号很熟悉吧,很多面试官都很喜欢问#{}和${}之间的区别,那它们到底有什么区别呢?一、MySQL预编译在开始介绍#{}和${}之前,我们先来讲讲MySQL预编译的含义。当客户端发送一条SQL语句给服务器后,服务器总是需要校验SQL语句的语法格式是否正确,然后把SQL语句编译成可执行的函数,最后才是执行SQL语句。其中校验语法,和编译所花的时间可能比执行SQL语句花的时间还要多。如果我们需要执行多次Insert语句,但只是每次插入的值不同,原创 2021-02-09 16:44:36 · 351 阅读 · 0 评论 -
10分钟搞定OAuth2.0授权服务
现在授权模式基本都是用OAuth2.0,什么OAuth2.0呢?这个有兴趣的同学可看阮大神的文章,今天主要给大家介绍一下OAuth 2.0的一种实现。OAuth 2.0 的一个简单解释http://www.ruanyifeng.com/blog/2019/04/oauth_design.htmlOAuth 2.0的授权主要通过Token令牌验证,这就涉及到用什么框架来生成Token了。Java一般常用的有两类框架,一个是Shiro和Spring Security,他们俩之间的区别,有兴趣的同学可原创 2020-09-09 19:08:32 · 1466 阅读 · 0 评论 -
Nginx服务不行了怎么办
我们在使用一个网站的时候,基本都是通过域名进行https数据交互的,服务的负载均衡现在大部分都是通过nginx来进行的。但是大家思考过没,如果用户并发高会出现什么问题,首先我们得分析这个数据流的瓶颈在哪里?数据流从数据流中,我们可以看到,并发高的瓶颈会在nginx服务器上面,因为所有的请求都是通过nginx进行转发的,一旦用户并发量过高,超过最大负荷的时候,nginx所在的服务器cpu、io、带宽、内存都将达到瓶颈,这个时候又该怎么办呢?DNS域名解析不要着急,首先域名请求到我们n...原创 2020-08-21 19:00:08 · 724 阅读 · 1 评论 -
我服务又双叒叕奔溃了,含泪干货分享
今天服务又双叒叕出问题了,问题还不仅仅就一个,而是一堆!!!异常信息:Channel shutdown: clean channel shutdown; protocol method: #method<channel.close>(reply-code=406, reply-text=TIMEOUT WAITING FOR ACK, class-id=0, method-id=0)Consumer failed to start in 60000 milliseconds;原创 2020-08-06 18:44:18 · 4311 阅读 · 0 评论 -
ArrayList、LinkedList哪家强,据说90%人都不知道
写代码的时候很经常就会用到List集合,但是很多时候我看到童鞋们都是用ArrayList来作为实现类,很少用LinkedList,鉴于这两个集合使用频率特别高,所以老师给童靴们分析一下,他们在不同场景下面效率,谁低谁高。学过数据结构的同学都知道,ArrayList采用的是线性表存储,LinkedList采用的链表存储,关于两则之前的区别,童鞋们可以自行了解。一、ArrayList与LinkedList我们主要研究以下几点: ArrayList多次扩容数组,对性能影响情况? 添加和原创 2020-07-17 18:46:54 · 402 阅读 · 0 评论 -
源码揭秘LinkedList removeAll失败原因
本来开开心心写着代码,然后一运行,一堆的错误信息,瞬间心情就不好了,生产代码我这边就不贴出来了,下面老师以demo为例,给大家分享一下这个难过的历程。public static void main(String[] args) { List<Integer> list = new LinkedList<>(); list.add(1); list.add(2); int perCount = 100, index = 0; int tim原创 2020-07-02 11:10:53 · 961 阅读 · 0 评论 -
MQ消息堆积终极解决方案【RabbitMQ】
如果架构中有用到mq,那就不可避免会遇到消息堆积的问题,因为我们没办法保证自己生产和消费永远都是正确的。像我们系统就遇到过很多次消息堆积情况,最严重的一次直接导致mq内存溢出,服务宕机,导致所有的mq消费全部出现异常,下面我就这个问题和童靴们唠叨唠叨。消息推送校验模式:遇到这个问题,第一个想法就是在推送消息的地方做改动,比如要推送mq的时候,先检查一下mq对应的队列是否达到上限,如果达到就不推送。但是如果消息具有时效性,也就是最新推送的消息和mq中已经推送的消息,是不一样的,这个时候就不能这样处原创 2020-06-12 18:34:11 · 7254 阅读 · 0 评论 -
容器重启23次,原因竟然是。。。。
最烦的事情,莫过于服务莫名其妙的重启,当你看到一个服务一天重启23次,你会是怎样的一个感觉,反正博主我快要摔电脑了。。。。问题既然已经发生了,肯定得动手术刀解决它。在开始看代码之前,我们可以先来假想一下,发生服务重启的原因可能有哪些,然后再根据可能性一条条的排查,这种方式可以快速的帮助我们分析并找到最终的问题点。服务重启的可能原因:第三方软件失效导致容器重启(MySQL、Redis、MQ等) 并发过高,导致cpu满负荷,服务宕机重启 容器所需资源被其它容器所干扰,导致资源不够重启.原创 2020-06-12 18:46:32 · 1919 阅读 · 0 评论 -
如何写出高质量代码,大佬10板斧经验分享!!!
这几天开发遇到了很多坑,大部分坑都是自己前期没规划好,后期因为业务已经开发完了,如果要进行大修改,又要回归测试所有的功能,最后只能不了了之。入坑后出坑的代价太大了,所以想分享一些日常开发心得,也希望童鞋们不要走我的老路。好了废话不多说,开始今天入坑血泪史介绍。一、请使用对象参数为什么方法参数最好用对象呢,核心原因就是为了好扩展,特别是service服务,每一个方法可能都会有很多地方引用,如果方法参数发生变动,那意味着所有调用这个方法的地方,都得进行修改,这个工作量可想而知。下面我们来举一个例子:原创 2020-06-12 18:22:35 · 604 阅读 · 0 评论 -
最新B站大咖资源分享
程序员想要有一个更好的未来,就离不开持续性学习,想要系统性的学习一般要么看视频,要么看书。现在的视频教程要么是百度云盘分享,要么就是CSDN这种技术平台,但是大部分资料要么过时,要么需要付费。下面老师给大家分享一些B站的学习视频,无广告且免费的哦。程序员高薪必备技能:Java多线程https://www.bilibili.com/video/BV1L4411i7eW通往大神的必经之路:...原创 2020-05-06 21:06:25 · 936 阅读 · 0 评论 -
Java异常宝典
在开发过程中,我们会遇到各种各样的问题,这边博主给大家收集总结了一下,有需要的可以收藏哦~1、java.lang.ArithmeticException算术运算异常,例如除数为0,所以引发了算数异常2、Java.lang.StringIndexOutOfBoundsException:这是截取字符串substring()产生的下标越界异常。原因是可能是字符串为空,或长度不足13...转载 2020-04-24 20:13:57 · 589 阅读 · 0 评论 -
Java中实现超大Json文件读取,还不会内存溢出
一般来说Json文件都相对比较小,但是盖不住有些变态的需求中,Json的文件简直大到让你发指,那如果遇到超大Json解析的时候,我们又该如何解决呢?今天就给大家分享一种,可以利用极低的内存,就可以解析任意大小的Json文件的方法。一、准备大Json文件在win10系统E盘目录下,准备一个接近400M的超级大Json文件(gz压缩包解压之后的文件大小),如下图所示:在IDEA中,...原创 2020-04-22 21:39:47 · 7313 阅读 · 4 评论 -
大数据技术栈详解
相信很多学Java的同学都有想转大数据或者学大数据的想法,但是一看到网上那些大数据的技术栈,就一脸懵逼,什么Hadoop、HDFS、MapReduce、Hive、Kafka、Zookeeper、HBase、Sqoop、Flume、Spark、Storm、Flink等等技术。童鞋们可能一下子就慌了,像学Java的也就SSM、Springboot、Spring Cloud、MySQL这些,线...原创 2020-04-12 19:11:16 · 4661 阅读 · 0 评论 -
redis分布式锁--》死锁问题解决策略研究
死锁场景redis分布式锁都不可避免会遇到死锁问题,我们先来讨论一下,什么场景会发生死锁问题。因为redis锁对应的key还在,如果不将redis锁对应的key删除,下次获取锁的时候还是会失败。redis integration原理有童鞋会说,那还不简单,重启的时候直接将redis锁对应的key删除不就可以了吗?当然不行,再讲这个问题之前,我们先来简单的看一下redis i...原创 2020-04-09 18:54:35 · 1757 阅读 · 0 评论 -
Spring MVC源码---- @RequestBody和@ResponseBody原理解析(版本:Spring Framework 5.1.7.RELEASE)
@RequestBody作用是将http请求解析为对应的对象。例如:http请求的参数(application/json格式):{ "accountId": 10, "adGroupId": "12345678", "campaignId": "12345678", "dataType": 0, "sign": "abcdefg", "site": "us", ...原创 2020-03-31 22:55:41 · 896 阅读 · 0 评论 -
揭秘前端精度丢失之谜!!!
今天测试突然跟我说页面显示的数值和数据库的对应不上,一开始我以为是程序问题,把数据给修改了,但是后面检查程序发现,没有任务问题,用postman请求,发现数据也和数据库的一致。但是页面上面显示的就是不一样。问题追踪一开始我怀疑是前端转型把精度丢失,前端那边直接是通过Number接收的,没有任何转型操作。后来我怀疑可能是因为服务器是Long类型,前端是Number类型,可能是精度对应不上,后...原创 2020-03-22 19:16:15 · 860 阅读 · 0 评论 -
log.error()底层到底做了些啥?
今天给大家介绍一下logback日志,底层是如何实现的。这边我们打印一下error级别的日志,看看从log.error到输出磁盘,这个过程中到底发生了些什么,并从源码级别揭秘整个日常的输出过程。我们先在代码中编写log.error,作为日志入口。log.error("测试日志输出:accountId:{},site:{}", accountId, site);进入error()函数...原创 2020-03-16 17:53:35 · 4633 阅读 · 0 评论 -
零基础-项目开发经验分享
前段时间分配到一个支付相关的需求,一个需要和前端对接的项目,需要涉及到前后端对接的问题。为了可扩展性,决定将支付项目独立为一个新的服务。新创建的项目,不熟悉的童鞋可能会遇到一堆的坑,这边博主简单分享一下,自己的开发经验和准则。确定需求:在开发之前,我们首先要明确需求,需求中到底涉及到哪些业务,哪些流程。一定要先搞清楚才能进行实际代码的开发,否则代码可能有推到重来的风险(那个时候就等着使劲加...原创 2019-12-30 22:15:37 · 778 阅读 · 0 评论 -
反编译小程序,这一篇就够了!!!
一、前言看到人家上线的小程序的效果,纯靠推测,部分效果在绞尽脑汁后能做出大致的实现,但是有些细节,费劲全力都没能做出来。很想一窥源码?查看究竟?看看大厂的前端大神们是如何规避了小程序的各种奇葩的坑?那么赶紧来试试吧。反编译,其实还是简单的,要想拿到微信小程序源码,找到源文件在手机存放的位置就行,源文件拿到,用反编译脚本跑一下,微信小程序代码包里的所有文件、所有资源就出来了(除了projec...转载 2019-12-30 22:11:35 · 2705 阅读 · 2 评论 -
如何用java中的webmagic爬取网页
说到爬虫,大家第一个想到的肯定是python的scrapyd爬虫。但是大家不知道吧,我们的java也有相应的爬虫工具。今天就给大家介绍一下我们java的爬虫工具。我们今天要介绍的爬虫工具,名字叫做webmagic,webmagic的架构图如下所示:如图所示,它主要分为四个部分:Downloader(页面下载) PageProcessor(页面分析及链接抽取) Scheduler...原创 2019-12-20 21:16:09 · 586 阅读 · 0 评论 -
阿里巴巴开源性能监控神器Arthas
线上经常遇到MQ消费速度忽高忽低,但是线下测试却没有问题。那会是哪一个问题引起的呢?因为影响MQ消费速度的因素太多了,如下因素只要任何一种出现问题,就会影响MQ消费速度。JVM内存过高,一直在Full GC。 Redis连接堵塞,导致Redis操作一直延迟。 第三方接口响应时间过长。 服务器cpu/带宽/IO受限。 Mysql出现慢sql,查询过慢。 程序本身问题(例如异常循环)。...原创 2019-11-24 23:28:58 · 929 阅读 · 0 评论 -
finally会不执行吗???
不知道大家有没有问过自己,finally方法会在什么时候不执行呢???有些人可能会一脸懵逼的说:怎么可能会不执行呢,那我们下面来看看finally到底会不会不执行。1.finally的含义finally的真正含义是指从try代码块出来才一定会执行相应的finally代码块。public class Test { public static void main(String[]...原创 2019-10-22 22:47:37 · 732 阅读 · 0 评论 -
慎用System.out.println!!!
初学者一般在开发中或者调试bug的时候,都会习惯性的使用System.out.println语句,输出到控制台中,观察数据是否正常。开发或者调试完毕,很可能就忘记删除,直接就发布到生产中去了。问题导入有童鞋会说,那有啥关系的,不就是控制台多打印一些日志嘛。那今天老师就和童鞋们分析一下,System.out.println输出语句对服务性能的影响。场景设置假如你的服务对性能要求极高,...原创 2019-10-22 22:45:57 · 8626 阅读 · 1 评论 -
Apache James邮件服务器介绍及配置发送外网邮件
本文介绍了James的外网配置,可以通过java来编写邮件。可以给各大邮箱发送邮件等功能。原创 2016-04-10 13:55:10 · 9594 阅读 · 5 评论 -
使用 JavaMail 实现邮件发送与收取
使用 JavaMail 实现邮件发送与收取,主要实现了文本和附件的发送功能,还有就是文本和附件的提取的功能。服务器是用James来搭建的。原创 2016-04-10 14:43:44 · 5467 阅读 · 1 评论 -
java Date获取 年月日时分秒
感谢暖流的分享,原文连接地址:点击打开链接package com.util; import java.text.DateFormat;import java.util.Calendar;import java.util.Date; public class Test { publ转载 2016-05-12 18:21:58 · 994 阅读 · 0 评论 -
Java生成缩略图之Thumbnailator
本文转载自:点击打开链接 感谢:rensanning的分享。Thumbnailator 是一个为Java界面更流畅的缩略图生成库。从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持了需要写入到最低限度的代码量。同时还支持根据一个目录批量生成缩略图。 http://code.google.com/p/th转载 2016-05-06 11:44:17 · 6327 阅读 · 0 评论 -
java与(&,&&)和或(|,||)的区别
感谢:cys1990922的分享 原文链接:点击打开链接1.与(&,&&)和或(|,||)的区别 1.1使用与操作的时候,要求前后几个表达式的内容都是true,最终结果才是true,如果有一个是false,则最终结果就是false; 1.2使用或操作的时候,要求前后几个表达式只要有一个true,则最终结果就是true,如果全都是false,则最终结果才是false;转载 2016-05-07 17:37:58 · 912 阅读 · 0 评论 -
Java中怎样判断一个字符串是否是数字
本文转载自点击打开链接1.用JAVA自带的函数public static boolean isNumeric(String str){for (int i = 0; i System.out.println(str.charAt(i)); if (!Character.isDigit(str.charAt(i))){ return转载 2016-05-08 11:15:48 · 1265 阅读 · 1 评论 -
java中实现投票选择班长的案例
本文通来实现投票选择班长的案例来掌握JAVA中Scanner和数组,while循环还有Comparable的用法下面看具体代码实现部分:package test;import java.util.Arrays;import java.util.Scanner;public class Test { public static void main(String[] args) {原创 2016-06-01 10:06:55 · 7023 阅读 · 2 评论 -
学生管理系统Java版
Model类:package com.ha.student;import java.util.ArrayList;import java.util.HashMap;public class Model {private HashMap mlist=new HashMap();private ArrayListalist=new ArrayList();public vo原创 2015-04-04 11:05:59 · 1514 阅读 · 0 评论 -
利用socket实现在线购买电脑零配件
客户端代码package com.client;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.InputStreamReader;import java.io.PrintWri原创 2015-04-04 10:56:41 · 733 阅读 · 0 评论 -
java中复制数组的4中方法
在开发的过程中很多情况都要对数组进行复制,下面举例介绍一下java中四种数组的复制。第一种:通过for循环进行数组的复制,例如: Object[] num={1,2,3,4,5}; Object[] num1=new Object[num.length]; for(int i=0;i<num.length;i++){ num1[i]=num[i]; } for(Ob原创 2016-06-02 18:10:13 · 744 阅读 · 0 评论 -
java Pattern和Matcher详解
结论:Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持. 单独用Pattern只能使用Pattern.matcher(String regex,CharSequence input)一种最基础最简单的匹配。java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅转载 2016-07-13 16:22:27 · 422 阅读 · 0 评论 -
Java基础系列之日期时间处理
Java在处理时间方面提供了很多的API供我们开发使用。例如:Date,Calendar,SimpleDateFormat等等之类的。下面看例子Demo的实现过程:package myapi.time.demo;import java.math.BigDecimal;import java.text.ParsePosition;import java.text.SimpleDateFor原创 2016-07-14 17:14:42 · 533 阅读 · 0 评论 -
Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中转载 2016-07-19 10:48:46 · 507 阅读 · 0 评论 -
Java栈与堆
Java栈与堆 ----对这两个概念的不明好久,终于找到一篇好文,拿来共享 1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,转载 2016-08-02 10:16:20 · 508 阅读 · 0 评论