![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 86
基础知识
汤圆学Java
这个作者很懒,什么都没留下…
展开
-
如何设计一个安全可靠的API接口
来源:https://www.cnblogs.com/jurendage/p/12653865.html前言 说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安全性呢?下面我们就来讨论下常用的一些API设计的安全方法,可能不一定是最好的,有更牛逼的实现方式,但是这篇是我自己的经验分享目录 token简介timestamp 简介sign 简介防止重复提交使用流程示例代码1. To转载 2021-08-24 21:33:29 · 419 阅读 · 0 评论 -
Java书单-比较全的一篇
本文已收录至码云:https://gitee.com/jalon2015/java-book前言之前写过一篇,Java核心书单,里面涵盖了几本主要的Java书籍;后来有朋友反馈说,这几本太少了,没得选;所以最近趁着有空,整理了一份稍微多点的,同时质量也比较高的书单;当然这肯定也是不全的,但是比之前的那一版会多那么一丢丢;下面所有的书籍都有对应的电子版,需要的可自取,细节参考码云重要的是这个版本会持续更新;重要的是这个版本会持续更新;重要的是这个版本会持续更新;其实这些书大家去网上搜.原创 2021-08-13 18:02:17 · 288 阅读 · 0 评论 -
多表联合查询:基于注解SQL
作者:汤圆个人博客:javalover.cc前言背景:Spring Boot + MybatisPlus用MybatisPlus就是为了不写SQL,用起来方便;但是如果需要多表联合查询,还是需要手写SQL(不过GitHub上也是有一些开源的库,可以不写SQL)本节介绍的还是通用的写法,基于注解SQL实现的多表联合查询简介大概流程就是先把要联合查询的参数封装到一个类里进行返回 - 结果类再在mapper中注入SQL查询语句 - @Select最后在service中拼接查询条件 - Qu原创 2021-06-03 17:34:43 · 706 阅读 · 3 评论 -
Java并发:ThreadLocal的简单介绍
作者:汤圆个人博客:javalover.cc前言前面在线程的安全性中介绍过全局变量(成员变量)和局部变量(方法或代码块内的变量),前者在多线程中是不安全的,需要加锁等机制来确保安全,后者是线程安全的,但是多个方法之间无法共享而今天的主角ThreadLocal,就填补了全局变量和局部变量之间的空白简介ThreadLocal的作用主要有二:线程之间的数据隔离:为每个线程创建一个副本,线程之间无法相互访问传参的简化:为每个线程创建的副本,在单个线程内是全局可见的,在多个方法之间不需要传来传原创 2021-05-27 19:01:11 · 158 阅读 · 0 评论 -
Java并发-显式锁篇【可重入锁+读写锁】
作者:汤圆个人博客:javalover.cc前言在前面并发的开篇,我们介绍过内置锁synchronized;这节我们再介绍下显式锁Lock显式锁包括:可重入锁ReentrantLock、读写锁ReadWriteLock关系如下所示:简介显式锁和内置锁最大的区别就是:显式锁需手动获取锁和释放锁,而内置锁不需要关于显式锁,本节会分别介绍可它的实现类 - 可重入锁,以及它的相关类 - 读写锁可重入锁,实现了显式锁,意思就是可重入的显式锁(内置锁也是可重入的)读写锁,将显式锁分为读写原创 2021-05-23 20:32:58 · 204 阅读 · 3 评论 -
Java并发-线程池篇-附场景分析
作者:汤圆个人博客:javalover.cc前言前面我们在创建线程时,都是直接new Thread();这样短期来看是没有问题的,但是一旦业务量增长,线程数过多,就有可能导致内存异常OOM,CPU爆满等问题幸运的是,Java里面有线程池的概念,而线程池的核心框架,就是我们今天的主题,Executor接下来,就让我们一起畅游在Java线程池的海洋中吧本节会用银行办业务的场景来对比介绍线程池的核心概念,这样理解起来会很轻松简介Executor是线程池的核心框架;和它相对应的有一个辅助工厂原创 2021-05-18 18:52:59 · 208 阅读 · 0 评论 -
Java并发-同步容器篇
作者:汤圆个人博客:javalover.cc前言官人们好啊,我是汤圆,今天给大家带来的是《Java并发-同步容器篇》,希望有所帮助,谢谢文章如果有问题,欢迎大家批评指正,在此谢过啦简介同步容器主要分两类,一种是Vector这样的普通类,一种是通过Collections的工厂方法创建的内部类虽然很多人都对同步容器的性能低有偏见,但它也不是一无是处,在这里我们插播一条阿里巴巴的开发手册规范:高并发时,同步调用应该去考量锁的性能损耗。能用无锁数据结构,就不要用锁;能锁区块,就不要锁整个方法体原创 2021-05-05 18:10:06 · 264 阅读 · 0 评论 -
线程的安全性 - 并发基础篇
作者:汤圆个人博客:javalover.cc前言官人们好啊,我是汤圆,今天给大家带来的是《线程的安全性 - 并发基础篇》,希望有所帮助,谢谢文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦简介当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就说这个类是线程安全的目录这次分三步走:关于相关知识点,放在文末的脑图里了,大家想看结论的,可直接下拉观看哦创建一个线程安全的类创建一个线程不安全的类:有一个状态变量创建一个线程不安全的类:有多个状态变量原创 2021-04-25 21:55:28 · 185 阅读 · 0 评论 -
Java8中的Optional操作
作者:汤圆个人博客:javalover.cc前言官人们好啊,我是汤圆,今天给大家带来的是《Java8中的Optional操作》,希望有所帮助,谢谢文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦最近看到有几个粉丝了(窃喜),多的话我也不说了,欢迎加入我们的荣华富贵大家庭简介目的:Optional的出现主要是为了解决null指针问题,也叫NPE(NullPointerException)外形:Optional外形酷似容器(其实它就是一个容器),只是这个容器比较特殊原创 2021-04-20 20:51:36 · 414 阅读 · 0 评论 -
Java8中的Stream流式操作 - 入门篇
作者:汤圆个人博客:javalover.cc前言之前总是朋友朋友的叫,感觉有套近乎的嫌疑,所以后面还是给大家改个称呼吧因为大家是来看东西的,所以暂且叫做官人吧(灵感来自于民间流传的四大名著之一《金瓶梅》)官人们好啊,我是汤圆,今天给大家带来的是《Java8中的Stream流式操作 - 入门篇》,希望有所帮助,谢谢文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦简介流式操作也叫做函数式操作,是Java8新出的功能流式操作主要用来处理数据(比如集合),就像泛型也大原创 2021-04-18 14:04:55 · 291 阅读 · 0 评论 -
Java8中的Lambda表达式
作者:汤圆个人博客:javalover.cc前言大家好啊,我是汤圆,今天给大家带来的是《Java8中的Lambda表达式》,希望对大家有帮助,谢谢文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦简介Lambda表达式是一个可传递的代码块,可以在以后执行一次或多次;下面贴个对比代码:// Java8之前:旧的写法Runnable runnable = new Runnable() { @Override public void run() { S原创 2021-04-16 19:00:43 · 214 阅读 · 0 评论 -
Java8中的默认方法
作者:汤圆个人博客:javalover.cc前言大家好啊,我是汤圆,今天给大家带来的是《Java8中的默认方法》,希望对大家有帮助,谢谢文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦简介在Java之前,我们接触到的接口,都是只定义方法,不实现方法(你看下面这几个人,像不像接口)但是到了Java8就不一样了,因为在接口中新增了默认方法这样的话,有些活,就可以交给接口自己去做了,而不用实现类去做(Java你这是在收买人心啊)我们下面以问答的形式来介绍默认方法原创 2021-04-14 14:09:29 · 167 阅读 · 0 评论 -
Java中对象的生与灭- 核心篇
前言大家好啊,我是汤圆,今天给大家带来的是《Java中对象的生与灭- 核心篇》,希望对大家有帮助,谢谢文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦简介前面我们了解了Java的三大特性,其中介绍了类的继承、重载等,这里我们就基于这些知识点,把对象的创建和回收进行一个简单的介绍这篇不是很长,只是介绍核心的几个知识点,相信大家很快就可以看完,真的目录堆和栈构造函数(生)对象的回收(灭)正文堆(heap)和栈(stack)堆是一块内存,用来存放对.原创 2021-04-12 21:16:42 · 213 阅读 · 0 评论 -
Java中的equals()和hashCode() - 超详细篇
前言大家好啊,我是汤圆,今天给大家带来的是《Java中的equals()和hashCode() - 详细篇》,希望对大家有帮助,谢谢文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦简介说到equals和hashCode,首先要说下Object我们都知道,这个Object是Java所有类的超类,其他类都是从Object直接或间接继承而来的而Object中自带的equals和hashCode方法就是今天我们要谈论的话题目录什么是equals()方法什么是ha.原创 2021-04-10 14:23:00 · 889 阅读 · 4 评论 -
Java中的泛型 - 细节篇
前言大家好啊,我是汤圆,今天给大家带来的是《Java中的泛型 - 细节篇》,希望对大家有帮助,谢谢细心的观众朋友们可能发现了,现在的标题不再是入门篇,而是各种详细篇,细节篇;是因为之前的几篇比较简单,所以叫做入门篇会合适点;现在往后的都慢慢的开始复杂化了,所以叫入门就有点标题党了,所以改叫详细篇或者细节篇或者进阶篇等等文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦简介泛型的作用就是把类型参数化,也就是我们常说的类型参数平时我们接触的普通方法的参数,比如publ原创 2021-04-08 12:34:49 · 767 阅读 · 8 评论 -
Java中的三大特性 - 超详细篇
前言大家好啊,我是汤圆,今天给大家带来的是《Java中的三大特性 - 超详细篇》,希望对大家有帮助,谢谢这一节的内容可能有点多,大家可以选择性的来看简介Java的三大特性:封装、继承、多态乍一听,好像很高大上,其实当你真正用的时候,会发现高大上的还在后面呢。。。热身在正式讲解三大特性之前,先普及几个知识1. 访问权限修饰符Java中关于访问权限的四个修饰符,表格如下privatefriendly(默认)protectedpublic当前类访问权限√√√√原创 2021-04-05 15:26:47 · 4302 阅读 · 10 评论 -
Java中的集合Set - 入门篇
前言大家好啊,我是汤圆,今天给大家带来的是《Java中的集合Set - 入门篇》,希望对大家有帮助,谢谢简介前面介绍了集合List,映射Map,最后再简单介绍下集合Set,相关类如下图所示正文Set从外面看像List(都是存储单一数据的集合),只不过存储的数据不会有重复;但是里面却是Map映射(因为它内存存储是基于Map结构实现),这也是为什么把Set放到Map后面来说的原因。Set和Map有什么关系呢?因为Map的键不会有重复,所以Set就利用了Map的这个特点,将其作为内部成员变量原创 2021-04-02 11:16:20 · 345 阅读 · 1 评论 -
Java中的映射Map - 入门篇
前言大家好啊,我是汤圆,今天给大家带来的是《Java中的映射Map - 入门篇》,希望对大家有帮助,谢谢简介前面介绍了集合List,这里开始简单介绍下映射Map,相关类如下图所示正文Map是一种存储键值对的数据集合,键以散列或者树形结构进行存储;为什么会设计Map接口呢?假设我们有一个员工类,里面有Id属性和姓名等其他信息,现在我们把所有员工都存到List里,然后要找出Id为001的员工,你会发现,你需要从List中遍历每个对象,然后取出Id进行比较;你会发现这种查找法效率很低,有点杀原创 2021-04-01 09:49:14 · 1568 阅读 · 2 评论 -
Java中的集合List - 入门篇
前言大家好啊,我是汤圆,今天给大家带来的是《Java中的集合List - 入门篇》,希望对大家有帮助,谢谢简介说实话,Java中的集合有很多种,但是这里作为入门级别,先简单介绍第一种集合List,如下图所示正文List是一种有序集合,和数组的行为非常相似,但是比数组灵活;因为数组是长度固定的,而List的长度是动态分配的。数组的概览既然LIst是基于数组实现的,那么在介绍List之前,我们先来熟悉一下Java的数组吧(简单过一下,毕竟用的不多了)数组对象有一个length属性来获取数组的原创 2021-03-31 09:54:25 · 331 阅读 · 2 评论 -
Java中的IO流 - 入门篇
前言大家好啊,我是汤圆,今天给大家带来的是《Java中的IO流-入门篇》,希望对大家有帮助,谢谢由于Java的IO类有很多,这就导致我刚开始学的时候,感觉很乱,每次用到都是上网搜,结果每次用完就忘;后来沉下心去看书学习,才明白都是有规律的;这里先做个简单的介绍,作为入门级教程,后面还有很多要学习的,有空再整理吧。简介文件IO流,主要有两种方式字节流:基于普通的Java对象,仅适用于Java程序之间的读写字符流:基于普通的文本字符串,不仅适用于Java程序之间的读写,也适用于Java程序和其原创 2021-03-29 21:49:56 · 190 阅读 · 5 评论 -
进程与线程 - 入门知识篇
前言大家好啊,我是汤小圆。今天给大家推荐的是,进程与线程的入门知识,希望对大家有帮助,谢谢。简介首先用术语来讲一下,进程是系统进行资源调度和分配的基本单元,线程是进程的最小执行单元;比如Windows中的任务管理器,就可以看到正在运行的进程,如下所示PS:这里要注意一点,程序不等于进程程序是指令的集合,是静态的;进程是正在执行的程序,是活的当你双击运行程序(.exe文件)时,程序的指令会加载到内存中,此时你就会得到这个程序的进程好了,术语讲完了,接下来开始讲人话知识点1. 进程和原创 2021-03-26 21:27:26 · 192 阅读 · 1 评论 -
TCP/IP协议 经典面试知识点
前言大家好啊,我是汤小圆。今天给大家推荐的是,TCP/IP协议的经典面试知识点,希望对大家有帮助,谢谢。简介我们平时经常听到的TCP/IP协议,其实是一个协议族;只不过因为TCP、IP是其中最核心的协议,所以平时统称为TCP/IP协议;这个协议族里面还有其他协议,比如HTTP、FTP、SMTP等;TCP分层框架下图是TCP/IP协议族的一个分层框架图,从上往下依次是应用层、传输层、网络层、链路层、物理层假如我想在机器A上,发送一条"Hello World"到机器B,这个通讯过程是个什么原创 2021-03-25 21:22:40 · 736 阅读 · 1 评论 -
Java学习路线(后端篇)
前言大家好啊,我是汤小圆。今天给大家推荐的是,JavaWeb学习路线,希望对大家有帮助,谢谢。絮叨学习途径:书+视频+实践,结合着来,食用效果最佳单纯看书,容易枯燥单纯看视频,会少了点自己的想法,一路都是跟着Up主的思路走但是结合着来,看书可以品味到作者的用心良苦,看视频可以体会到学习的乐趣,各取所需,多好!脑图先给大家附一张脑图,这样就可以有一个大致的参考方向1. 计算机基础不管什么编程,都是要先学习计算机基础的,有点像是练武之人先蹲马步TCP/IP协议:底层通信协议原创 2021-03-24 14:28:07 · 998 阅读 · 1 评论 -
Java书单-核心篇
前言大家好啊,我是汤小圆。今天给大家推荐的是,Java开发中最常用到的几本书籍,希望对大家有帮助,谢谢。基础Java核心技术卷一(第10版) 这一版主要是针对Java8进行了升级,适合入门,GUI部分可以跳过不看 Java编程思想(第四版) 也是入门书籍,不过需要有一定的编程知识,不然会有点吃力 可以中英文书籍对照着看,因为有的术语用原文看会更加通俗直观 进阶Java性能权威指南 主要关注Java性能调优,让开发者对Java平台的性能有更原创 2021-03-23 21:38:17 · 220 阅读 · 1 评论 -
SpringBoot 新项目加载 mysql 报错,提示找不到驱动
前记:多年以后,再次接触SpringBoot,感觉真好,还是熟悉的环境,熟悉的bug问题描述:刚初始化的项目,添加spring-boot-starter-jdbc后,启动就报错如下Failed to bind properties under '' to com.zaxxer.hikari.HikariDataSource: Property: driver-class-name Value: com.mysql.cj.jdbc.Driver Origin: "dri.原创 2020-09-19 23:22:38 · 3593 阅读 · 0 评论 -
Java web学习路线
转自知乎:Java SE 看传智播客毕向东的(反射那部分搭配着尚学堂马士兵的看),这部分搭配着《Thinking in Java》 做参考, 只是参考,我不得不强调:《Thinking in Java》不适合做入门书。Jdbc 看传智播客李勇的(其他老师的忽略), 这部分讲的很全,不用看书。 2.1 数据库先学习 MySQL, 然后对比学习 SQL Server 和 Oracle. 这部分可以转载 2015-08-17 19:45:17 · 1681 阅读 · 0 评论 -
问题记录(二):关于fastjson库遇到的问题
问题1描述:JSON.toJSONString(object)中,如果object是JsonObject,那么输出为空,不管object对象是否有内容原因:未知解决办法:不通过JSON.toJSONString(object)转换object到string,直接用object.toString()即可示例代码JSONObject object = new JSONObject();...原创 2019-03-18 18:41:26 · 312 阅读 · 0 评论 -
问题记录(一):调用唯品会API遇到的问题
当时客户端用c#开发的,获取VIP商品地址,发送到java后台,调用VIP的API,结果提示参数错误,调试发现,是因为客户端传过来的地址有误,地址中的&变成了unicode编码。解决办法:前台客户端将URL地址进行urlencode进行编码,然后到java后台再进行URL decode解码,即可 编码前: http://www.vip.com/detail-915976-136894680.h原创 2016-11-16 10:35:16 · 2656 阅读 · 0 评论 -
java编程思想阅读笔记(二)
创建字符串数组时,可以用这种方式String[] str = ("a b c").split(" ");输出数组:System.out.println(Arrays.toString(str));原创 2016-11-21 17:24:49 · 460 阅读 · 0 评论 -
Java编程思想阅读笔记(一)
第一章:对象导论 访问控制的优点(P5):防止类库代码被使用的程序员修改,且方便类库的作者进行修改代码复用是面向对象程序设计语言所提供的最了不起的优点之一,一般需要丰富的经验和敏锐的洞察力才可以设计出一个可供复用的对象多用组合,简单灵活;继承虽然重要,但是不能滥用,要在合适的地方用(具体哪里合适还不清楚)单根继承结构:所有对象都有一个基类Object,这样的好处是由于所有对象都保证具有基类的原创 2016-11-16 10:22:23 · 580 阅读 · 0 评论 -
Java学习笔记(三十一):导入静态类 import static com.example.test.*
导入静态类,一般用来简化代码,使其看起来不那么累赘(注:这个一般用在多次调用静态方法的时候,比如一些配置类)测试代码如下://test1.javapackage com.v11j;public class test1 { public static void test2(){ System.out.println("test1->test2()"); }原创 2018-01-10 09:41:25 · 701 阅读 · 0 评论 -
Java学习笔记(三十):javacv关于内存泄漏的问题
问题描述:最近用到了javacv处理图像,同事写的程序,我单独放在本地,通过run java application来跑是没问题的。 然后在本地部署到tomcat,通过接口访问,发现每访问一次,内存就蹭蹭的往上涨,任务管理器中java VM 内存一直在增加; 部署到linux远程服务器,运行几次,直接系统崩溃,tomcat关闭原因分析:因为涉及到多张图片的处理,而且处理完后没有进行释放,导致内存原创 2017-10-18 11:31:59 · 3827 阅读 · 3 评论 -
Java学习笔记(二十九):Map转Bean和Bean转Map
问题描述:因为在写接口的时候,经常会将request的数据转成map,然后再map.get(key),bean.setKey(value);每次这样比较麻烦;解决办法:写一个工具类,直接进行将Map和Bean进行转换 下面是代码: //map2bean public static void mapToBean(Map<String,Object> map, Object object){转载 2017-08-31 15:57:23 · 328 阅读 · 0 评论 -
Java学习笔记(二十八):java获取路径的问题
在jsp和class文件中调用的相对路径不同。在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getProperty(“user.dir”)获取你工程的绝对路径。1.jsp中取得路径: 以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.getRequestURI() 结果:转载 2017-06-02 12:11:21 · 393 阅读 · 0 评论 -
Java学习笔记(二十七):阿里巴巴java开发手册阅读笔记
所有的覆写方法,必须用@Override注解。 说明:getObject()和get0bject()的问题。一个是字母的O,一个是数字的0,加@Override可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错所有的相同类型的包装类之间值的比较,全部使用equals方法比较 说明:对于 Integer var = ? 在-128 至 127 范围内的赋值,原创 2017-05-26 15:04:53 · 601 阅读 · 0 评论 -
Java学习笔记(二十七):关于List<Map<String,?>>中添加map
今天测试时,写了如下的代码,然后运行发现,list里的map的值都一样。原因还不知道,只知道不能这样写,如果想要往list中添加map,map必须是新建的,不能是以前的map,否则以前添加的那个map的值就会被最新的map的值覆盖。List<Map<String,String>> listMap = new ArrayList<Map<String, String>>(); Ma原创 2016-08-04 19:39:15 · 3857 阅读 · 0 评论 -
Java学习笔记(二十六):字符串连接用+和StringBuilder的append的区别
字符串连接,用+进行连接,其实内部也是通过StringBuilder的append来实现的;一般情况进行字符串拼接用+就可以,系统内部会进行优化,但是如果是循环拼接,则需要用StringBuilder的append来实现;原因:因为如果是循环拼接,那么系统会在循环体内部创建StringBUilder,这样会造成空间浪费;而用StringBuilder进行显示拼接时,可以定义在外面,减少内存的消耗原创 2016-11-25 17:39:48 · 5603 阅读 · 0 评论 -
Java学习笔记(二十六):String.split()的使用
转自:http://swiftlet.net/archives/709在java.lang包中有String.split()方法的原型是: public String[] split(String regex, int limit)split函数是用于使用特定的切割符(regex)来分隔字符串成一个字符串数组,函数返回是一个数组。在其中每个出现regex的位置都要进行分解。需要注意是有以下几转载 2016-12-30 09:19:34 · 478 阅读 · 0 评论 -
Java学习笔记(二十五):mac配置java_home和配置$path
摘自百度经验:$ cd ~$ vim .bash_profile export JAVA_HOME=$(/usr/libexec/java_home) $ source .bash_profile echo echo JAVA_HOME/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home转载 2016-10-08 16:46:30 · 769 阅读 · 0 评论 -
Java学习笔记(二十四):微信获取临时素材,然后存到oss
开始获取临时素材时,遇到好多问题,下面是问题总结: 1、不知道调用”获取临时素材”接口返回的是什么东西,其实就是返回图片数据流,如果直接用浏览器打开链接(即该接口),就会提示下载图片 2、获取临时素材,返回的信息头部的Content-type是application/json,是因为出错了,可以通过BufferReader读取获取的InputStream,换成字符串,就会提示错误码和错误信息,我原创 2016-09-29 17:30:51 · 6827 阅读 · 0 评论