深入学习Java
haoshuai2015
这个作者很懒,什么都没留下…
展开
-
JSON数据解析方式总结--Java中String、Json、Java对象之间相互转换
背景知识: JSON是一种类似 XML的语言,是用了存储和交换文本信息的语法。它的全称为JavaScript Object Notation(JavaScript 对象表示法)。与xml对比,它更小、更快,更易解析。想要更好的解析JSON,必须能看懂JSON数据,这样就必须了解JSON语法,好在它的语法非常简单,规则如下:JSON 语法是 JavaScript 对象表示法语法...原创 2018-10-22 14:00:09 · 2681 阅读 · 1 评论 -
项目中遇到的授权和鉴权问题解决方案
目录一、固定token方案二、Session认证方案三、客户端token方案(项目中采用的是此方案)四、第三方授权方案五、API请求签名下面主要介绍工作中遇到的授权和鉴权问题,采用的五种方案。 一、固定token方案 这是一种“懒人”的方案,在发送请求时,在cookie中带入固定值,在nginx中判断cookie中的值是否正确,如果正确则允许访问服务...转载 2019-02-13 14:25:00 · 2562 阅读 · 0 评论 -
Java深入学习的途径和资源
目录了解Java最新资讯1.关注twitter上的Java组织以及大牛2.关注reddit上的Java讯息3.Hacker News4.Medium5. Quora和知乎优秀博客站点公司组织个人博客Java书籍Github资源比较好的教程资源练手项目源码阅读课程相关 平时会有想深入学习下Java相关知识点,或...转载 2019-02-13 15:12:40 · 1419 阅读 · 0 评论 -
一个List按照另一个List的数据顺序来排序
平时我们一般都是直接按照一定的规则,在sql查询返回结果的时候,就返回特定排列顺序的List结果。例如order by createtime desc; 这样的排序结果一般都是数据库中已有的字段的,比较好排序。 但是,有时候会有要求,一个list orderRegulation设置顺序,另一个list targetList按照规则排列自身的顺序。这样就很难在mysql中直接写出排序规则,直接输...原创 2019-06-26 16:07:49 · 20017 阅读 · 3 评论 -
【转】Java高并发--秒杀系统
看到一篇描写Java秒杀系统的视频观后总结的博文,写得挺好,里面一些内容有借鉴意义,特此选择其中个人觉得有意义的地方摘录下来,其中的有些知识点(例如Mybatis配置属性)本人并没有全部进行验证,大家采用的时候仅供参考哈!Mybatis的一些有用的配置属性:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE con...转载 2019-06-27 17:36:17 · 214 阅读 · 0 评论 -
JDK导入安全证书失败异常问题解决
今天项目启动遇到了证书异常问题,网上搜了安全证书的导入方式,还是出现一些比较少见的异常,下面记录下来且给出了解决方 案,希望可以给后续遇到相同问题的同学 提供解决思路。 JDK证书的导入方式,百度随意搜索都可以找到。下面给出了一些我遇到的问题。问题一:CMD命令行窗口,显示 'keytool' 不是内部或外部命令,也不是可运行的程序或批处理文件。解决办法...原创 2019-07-09 19:09:44 · 6000 阅读 · 1 评论 -
Spring AOP基础知识及其运用
最近涉及到公司系统信息安全整改,需要将涉及到敏感信息的操作日志发送到QMQ,因此正好借此机会重新熟悉运用了Spring AOP机制,加深了以下对其的了解。 先直接贴出我参考的几篇文章把,或许不全,但于我这次的日志整改开发已经够用了,仅供大家参考。 Spring Boot中使用AOP统一处理Web请求日志 Spring boot实现web层的日志切面 ...原创 2019-07-15 18:22:04 · 131 阅读 · 0 评论 -
mysql在特定位置增加表字段的命令
mysql插入某个字段值项目开发过程中,经常会遇到需要在已经建好的数据库表中新增删除字段的情况,具体的命令大家应该已经很清楚了,参考语句如下:alter table A add addr varchar(64) default null COMMENT '组别邮件地址';其中的alter table *Aadd column addr varchar(20) not null;...原创 2019-07-29 16:01:48 · 2008 阅读 · 0 评论 -
Java中String、Date、Calendar之间相互转换
实际开发中,经常会遇到日期类型不一致的情况,这就需要我们将日期转换为自己当前需要的类型。一般转换情况如下:1.Calendar 转化 StringCalendar calendat = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String dateStr = ...原创 2019-08-20 17:03:07 · 377 阅读 · 0 评论 -
从架构角度看Java分布式日志如何收集
目录基础概念划分清楚 Logging 、Metrics、 Tracing技术 Tracing 链路跟踪、生态圈现状技术 Logging 本身,生态圈现状技术选型 比较实战第一个问题:所有请求的日志明细第二个问题: 将 Logging 收集到 ELK第三个问题:我们在我们的每个请求 Header 上加上 traceId第四个问题:Tracing 处理 ...转载 2019-02-18 16:59:54 · 1671 阅读 · 1 评论 -
定时任务Java实现
定时任务Java实现的几种基本方法。方法一:Thread是我们最容易想到的,利用while循环,在其中加入sleep方法来实现定时功能。具体代码实现如下代码示例:public class TestTimeOrder { public static void main(String[] args) { final long timeInterval = 30...原创 2019-02-12 17:38:56 · 10920 阅读 · 2 评论 -
RPC 服务框架原理及其简单实现
目录 概念解释RPC框架简单实现定义服务实现接口服务端实现客户端实现概念解释 RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发...转载 2019-02-18 12:13:18 · 1346 阅读 · 0 评论 -
Java异常日志堆栈信息如何打印到日志文件
当我们使用try..catch方法(如下图所示)捕获到异常堆栈信息时,有时候无法打印出具体的错误信息到日志文件,即无法通过抛出的异常迅速定位到问题所在。因此我们需要将异常堆栈信息通过某种方法解析出来,输出完整正确的日志信息。try{ //do something}catch(Exception ex){ ex.printStackTrace();}...原创 2018-12-14 16:06:27 · 15803 阅读 · 5 评论 -
观察者模式--彻底理解运用Java设计模式之观察者模式
定义与意义: 观察者模式是对象的行为模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 我们又把这种模式成为发布--订阅模式(Publish/Subscribe)或者模型-视图模式(Model/View)模式。该模式的最重要作用是解耦,将被观察者和观察者进行解耦,使得它们的依...转载 2018-12-25 17:57:56 · 168 阅读 · 0 评论 -
分布式、高并发、多线程基础知识
分布式、高并发、多线程的区别与联系 首先确认一点,他们三个是相伴而生,但侧重点各有不同。 分布式分布式更多的一个概念,是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段。该领域需要解决的问题极多,在不同的技术层面上,又包括:分布式文件系统、分布式缓存、分布式数据库、分布式计算等,一些名词如Hadoop、zookeeper、MQ等都跟分布式有关。从理念上讲,分布式的实现...转载 2019-01-29 11:48:29 · 432 阅读 · 0 评论 -
学习Java多线程
以下主要涉及Java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法等。如有需要,请选择阅读。 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程。(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销...原创 2019-01-29 16:33:58 · 142 阅读 · 0 评论 -
Java数据存储--堆、栈、方法区
堆特点:堆的特点是存储比较灵活,可以动态的分配存储空间以及大小 存储内容:存储了所有new的对象,以及数组 关于线程:堆是共享于所有的线程的栈特点:栈的存储速度快,内存向上移动就是释放,向下移动就是存储,速度仅次于寄存器,但是在创建程序时候,JAVA编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。 存储内容:常用来存储一些局部...转载 2019-02-15 15:19:52 · 199 阅读 · 0 评论 -
数据缓存的Java实现
目录基础概念和问题缓存相关概念缓存相关问题本地缓存Guava CacheEHCache远程缓存Redis集群 对于缓存大家应该都不陌生,缓存的核心是用空间换实践,通过分配一块高速存储区域(一般都是内存)来提高数据的读写效率,其实现的难点在于清空策略的实现,比较合理的思路就是定时回收与及时判断数据是否过期相结合。 下面文章是转发的,主要从本地缓存、远程缓存...转载 2019-02-15 17:13:04 · 7618 阅读 · 0 评论 -
利用Cat查看GC情况及优化措施
我们平时项目中,一般都会用到CAT来进行日志监控查看,我们可以利用Cat的Heartbeat报表来查看对应的GC情况。 我们可以往下翻,查看对应的Young GC次数以及Full GC次数。如果FULL GC次数过于频繁,我们可以通过以下方式来进行代码优化。方式一:通过jmap分析出内存占用最多的类,进行代码优化以减少内存使用。jmap -histo[:liv...原创 2019-02-21 16:59:39 · 1535 阅读 · 0 评论 -
JVM知识点以及常用参数及工具
目录 基础知识JVM运行时内存消耗是指哪些方面分代内存管理Stop the World(STW)Concurrent 和 STW 的GC对比Young GC(Minor GC)Full GC(Major GC)常用GC并行收集器Concurrent Mark-Sweep(CMS) 收集器G1收集器常用JVM参数常用JVM工具jpsjs...转载 2019-02-21 18:25:27 · 279 阅读 · 0 评论 -
Java分页查询接口实现-根据返回的所有数据手动分页
在某些时候,我们调用第三方接口时,他们的接口有进行分页,但是并不能满足我们的需求。 那么我们就需要自己进行分页处理。思路一般是: 第一步:获取第三方接口调用返回的所有结果(可以循环获取),具体示例参考Step1.大家要根据自己的实际情况来调整修改。 第二步:根据返回的结果进行分页(调用方法Step2)。 同时,我写了个分页实现的工具类(Step3)供大家参考使用 St...原创 2019-08-21 15:48:33 · 6966 阅读 · 1 评论