Java
跟派大星学编程
从HelloWorld到改变世界
展开
-
分布式Id自增生成器
转载自:https://zhuanlan.zhihu.com/p/65095562首先,需要确定全局唯一ID是整型还是字符串?如果是字符串,那么现有的UUID就完全满足需求,不需要额外的工作。缺点是字符串作为ID占用空间大,索引效率比整型低。如果采用整型作为ID,那么首先排除掉32位int类型,因为范围太小,必须使用64位long型。采用整型作为ID时,如何生成自增、全局唯一且不重复的ID...转载 2019-06-02 20:00:35 · 2239 阅读 · 0 评论 -
Java面试通关秘籍(一)
1. 基础篇1.1 Java基础面向对象的特征:继承、封装和多态1.继承: 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。好处:提高了代码的复用性。让类与类之间产生了关系,提供了多态的前提。2.封装: 隐藏对象的属性和实现细节,仅对外提供公共访问方式。好处: ①将变化隔离。 ②便于使用。 ③提高...原创 2018-09-01 16:13:15 · 363 阅读 · 0 评论 -
以生活的例子说明单线程和多线程
以生活例子说明单线程与多线程转载自:书圈1. 程序设计的目标在我看来单从程序的角度来看,一个好的程序的目标应该是性能与用户体验的平衡。当然一个程序是否能够满足用户的需求暂且不谈,这是业务层面的问题,我们仅仅讨论程序本身。围绕两点来展开,性能与用户体验。 性能:高性能的程序应该可以等同于CPU的利用率,CPU的利用率越高(一直在工作,没有闲下来的时候),程序的性能越高。 体验:这...转载 2018-07-07 20:17:03 · 447 阅读 · 0 评论 -
JVM学习总结
转载自:https://github.com/crossoverJie/Java-Interview1. Java 运行时的内存划分1.1 程序计数器记录当前线程所执行的字节码行号,用于获取下一条执行的字节码。当多线程运行时,每个线程切换后需要知道上一次所运行的状态、位置。由此也可以看出程序计数器是每个线程私有的。1.2 虚拟机栈虚拟机栈是有一个一个的栈帧组成,栈帧是在...转载 2018-07-19 09:24:04 · 204 阅读 · 0 评论 -
SpringBoot前后端数据传输加密
采用的算法为AES算法1. 编写加密工具类package com.pibigstar.utils;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base...原创 2018-07-04 19:05:21 · 13750 阅读 · 12 评论 -
Java生成MD5的两种方式
1 原生的package com.pibigstar.common.utils;import java.security.MessageDigest;/** * MD5加密工具类 * @author pibigstar * */public class MyMD5Util { //盐,用于混交md5 private static final String sl...原创 2018-06-28 12:56:11 · 128370 阅读 · 4 评论 -
Mybatis联表查询
1 使用注解方式1.1 一对一ClazzModel.java (返回前端的模型)public class ClazzModel { private Long id; private String name; private String description; private Grade grade; //联表 private User us...原创 2018-06-27 11:27:24 · 2643 阅读 · 1 评论 -
基于Mysql实现锁机制
1 ReentrantLock它是一个可重入锁,即一个线程可重复加锁,即当前线程获取该锁再次获取不会被阻塞。获得几次锁,解锁也要解几次。 它有两种实现,公平锁和非公平锁。公平锁:锁的获取顺序就应该符合请求上的绝对时间顺序非公平锁:不按请求的时间,谁抢到就是谁的默认实现的为非公平锁,因为公平锁为了保证时间上的绝对顺序,需要频繁的上下文切换,而非公平锁会降低一定的上下文切换,降低性...原创 2018-07-01 20:05:47 · 705 阅读 · 0 评论 -
获取所有QQ好友列表以及好友信息
1 获取所有QQ这里主要通过抓包,抓取QQ空间中的数据 记得将访问空间权限改为QQ好友 接口地址: https://h5.qzone.qq.com/proxy/domain/base.qzone.qq.com/cgi-bin/right/get_entryuinlist.cgi?uin=741047261&fupdate=1&action=1&offset=0...原创 2018-06-25 15:22:33 · 21718 阅读 · 26 评论 -
SpringBoot使用异步任务
1. 开启异步任务package com.pibigstar;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.scheduling.annot...原创 2018-06-14 17:01:28 · 1333 阅读 · 0 评论 -
SpringBoot使用redis
1. 下载redis和工具2. 加载redis的jar包3. 添加配置文件4. 使用5. 在redis工具中查看数据6. 封装工具类6.1 JSON工具类6.2 redis操作工具类1. 下载redis和工具redis服务器下载: 点击这里解压,双击start.bat启动服务下载redis桌面管理程序:点击这里安装即可2. 加载redis的jar包...原创 2018-06-14 16:13:47 · 695 阅读 · 0 评论 -
Nginx使用总结
前期准备1. 反向代理1.1 概念1.2 实现1.3 访问2. 动静分离2.1 概念2.2 实现3. 负载均衡3.1 概念3.2 启动两个tomcat3.3 修改nginx.conf文件3.4 重启nginx并访问4. session共享4.1 概念4.2 解决办法(一)4.3 解决方法(二)4.3.1 启动redis4.3.2 下载jar包4...原创 2018-06-13 20:09:18 · 273 阅读 · 0 评论 -
AOP使用总结
1. AOP简介2. AOP使用2.1 @Aspect2.2 @Poincut2.3 @Before2.4 @After2.5 @AfterThrowing2.6 @AfterReturning2.7 @Around1. AOP简介 AOP是一种编程范式,它主要是为了将非功能模块与业务模块分离开来,让我们更好的管理这些非功能模块。它的使用场景有:权...原创 2018-06-12 15:11:47 · 999 阅读 · 0 评论 -
Swagger自动生成接口文档
1. 添加依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.8.0</ver...原创 2018-06-03 18:57:46 · 3651 阅读 · 0 评论 -
Java代码优化的N条建议
一、代码优化的目标是:1、减小代码的体积2、提高代码运行的效率本文的内容有些来自网络,有些来自平时工作和学习,当然这不重要,重要的是这些代码优化的细节是否真真正正地有用。那本文会保持长期更新,只要有遇到值得分享的代码优化细节,就会不定时地更新此文。二、代码优化细节:1、尽量指定类、方法的final修饰符带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如j...转载 2018-04-07 10:57:40 · 658 阅读 · 0 评论 -
Spring中自定义注解与使用
以日志打印为例:一、注解接口import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.anno...原创 2018-04-17 19:19:32 · 1676 阅读 · 1 评论 -
以生活的例子来解释编程中的名词
死锁 死锁就是两个或两个以上的线程争夺同一资源而形成的一种僵持状态,这种状态在没有外力的作用下将一直持续下去例子:比如馍夹菜这道菜,需要馒头和菜,A线程抢到了馒头,而B线程抢到了菜,这时A需要B的菜,而B需要A的馒头,他们都不愿放弃手中的资源而一直僵持下去,这种就叫做死锁活锁 活锁简单来说就是同时释放,又同时拿,还是上面那个例子,A放弃了馒头,B也放弃了菜,可他们又同...原创 2018-09-18 15:04:09 · 379 阅读 · 0 评论 -
常见正则表达式剖析
没错,又是正则,没办法,这东西入门很简单,但真正能写好,那是真心难,继续学吧。。。基本语法我在这里就不赘述了,需要的话可以关注我公众号,里面有很详细的语法介绍和示例。今天我们来针对几个常见的正则来慢慢刨析电话号码这个应该是最常用的,没有之一了吧手机号中国的手机号码都是11位数字,所以,最简单的表达式就是:[0-9]{11}不过,目前手机号第1位都是1,第2位取值为3、4、5、...原创 2018-10-16 12:52:08 · 1295 阅读 · 0 评论 -
10行代码搞定微信支付(Java版)
微信支付痛点对于大多数同学来说,要开发微信支付可不简单。附上微信支付官方文档https://pay.weixin.qq.com/wiki/doc/api/index.html从文档上可以看出,你需要解决很多问题,我就随便挑几个吧。xml与对象的互转: 微信使用xml格式而不使用json通信, 也确实有点奇葩签名:千万不要以为只是MD5一下,要是你自己开发,我敢说,你60%的时间都耗在签名...转载 2018-10-16 13:00:08 · 910 阅读 · 0 评论 -
使用Callable实现不同回调函数
针对不同的场景,我们可能需要不同的回调,每一个回调操作是不同的定义回调操作抽象类public abstract abstract class Operation<V> implements Callable<V> { /** 内部具体的执行操作 */ protected abstract V run() throws HttpReque...原创 2019-04-18 14:40:48 · 1027 阅读 · 0 评论 -
修改Java字节码
下载工具asmtools下载链接:https://pan.baidu.com/s/1iNHJKK9Ndsag_gqi2PYAkQ提取码:72ke操作字节public class Foo { public static void main(String[] args) { boolean flag = true; if (flag) { System.out.prin...原创 2019-03-24 17:04:20 · 1585 阅读 · 0 评论 -
自定义类加载器实现代码热替换
代码热替换,在不重启服务器的情况下可以修改类的代码并使之生效1. 自定义类加载器package com.pibgstar.demo.java;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.IOException;import java.util.Set;/**...原创 2019-02-14 10:27:57 · 887 阅读 · 0 评论 -
java随笔记
文件写入String fileName = "/root/log/test.log";Path file = Paths.get(fileName);boolean exists = Files.exists(Paths.get(dir), LinkOption.NOFOLLOW_LINKS);try { if (!exists) { Files.createDir...原创 2019-01-21 15:56:15 · 182 阅读 · 1 评论 -
使用java打开网页并截图
控制浏览器打开网页只适用于JDK1.6之上的package com.pibgstar.demo.utils;import javax.imageio.ImageIO;import java.awt.*;import java.awt.event.KeyEvent;import java.awt.image.BufferedImage;import java.io.File;impor...原创 2019-01-08 10:46:23 · 3328 阅读 · 3 评论 -
使用java画一张海报
PS: 没找到合适的海报背景,就随便找了一张,使用技术都是相同的1. 添加依赖这俩其实跟本章节的核心技术没有关系,是为了获取QQ昵称和QQ头像而引入的。 <!-- jsoup --> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup&l...原创 2019-01-08 10:26:57 · 1924 阅读 · 1 评论 -
注解防止表单重复提交
1. 注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface StopRepeatSubmit {}2. 拦截处理器/** * @author pibigstar * @desc 防止表单重复提交拦截处理器 **/public class StopRepeatSubm...原创 2018-12-09 13:56:05 · 477 阅读 · 1 评论 -
Java使用Jwt加密信息生成token
1. 添加依赖<!-- jwt加密工具类 --><dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version>&am原创 2018-12-14 09:37:02 · 2250 阅读 · 0 评论 -
使用PropertyDescriptor反射调用setter/getter方法
有时候我们只知道一个对象的字段,我们想通过反射的方式将此字段赋值,可直接写反射又太浪费时间,还需要自己手动拼接方法名,而java为我们提供了一个很方便的类(PropertyDescriptor)来操作这一过程。使用很简单,直接看代码:代码import com.pibgstar.demo.bean.User;import java.beans.IntrospectionException...原创 2018-12-03 19:15:39 · 1138 阅读 · 0 评论 -
Java使用itexpdf创建pdf文件并添加水印
1. 添加依赖&lt;dependency&gt; &lt;groupId&gt;com.itextpdf&lt;/groupId&gt; &lt;artifactId&gt;itextpdf&lt;/artifactId&gt; &lt;version&gt;5.5.13&l原创 2018-11-30 19:33:45 · 2997 阅读 · 1 评论 -
java使用poi反射读取写入Excel
通过反射来读取写入Excel添加依赖 <!-- excel操作 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</versi原创 2018-12-04 19:17:50 · 472 阅读 · 0 评论 -
java使用zxing制作二维码
因为项目需要,我封装了三个不同的二维码构建,一个是制作普通的二维码,一个是带logo的,还有一个是带logo和文字的,不废话,直接上代码。添加依赖<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <...原创 2018-11-29 18:33:46 · 2218 阅读 · 0 评论 -
浅谈Java中的内存区域划分
1. java中内存区域的划分上节谈了Java中的垃圾回收机制,今天我们聊聊Java中内存区域的划分。总得来说Java中内存分为四块:栈、堆、数据域、代码域1. 栈栈中主要存放基本类型的数据和对象的引用也就是存放变量。Java虚拟机会为每一个方法申请一个栈空间,在这个方法中声明的变量都是放到此栈中的,他们会随此方法的调用结束而回收掉。如果存放的是基本类型数据(普通变量非静态变量),...原创 2018-11-23 19:53:56 · 216 阅读 · 0 评论 -
简单谈谈Java中的垃圾回收器
1. 垃圾回收器算法目前主流垃圾回收器都采用的是可达性分析算法来判断对象是否已经存活,不使用引用计数算法判断对象存活的原因在于该算法很难解决相互引用的问题。1.1 标记-清除算法(Mark-Sweep)标记-清除算法由标记阶段和清除阶段构成。标记阶段是把所有活着的对象都做上标记的阶段;清除阶段是把那些没有标记的对象,也就是非活动对象回收的阶段。通过这两个阶段,就可以令不能利用的内存空间重...原创 2018-11-21 20:33:40 · 424 阅读 · 0 评论 -
java23种设计模式详解
一、设计模式分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:并发型模式和线程池...转载 2018-04-17 09:51:46 · 442 阅读 · 0 评论 -
Java发送邮件支持QQ和163邮箱
package com.pibigstar.util;import java.util.Date;import java.util.Properties;import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.ma...原创 2018-03-18 19:01:58 · 1200 阅读 · 0 评论 -
SpringMVC核心原理与常用注解解释
Spring MVC 3.0深入核心原理1. 用户发送请求给服务器。url:user.do2. 服务器收到请求。发现DispatchServlet可以处理。于是调用DispatchServlet。3. DispatchServlet内部,通过HandleMapping检查这个url有没有对应的Controller。如果有,则调用Controller。4. Controlle原创 2017-07-20 09:17:19 · 804 阅读 · 0 评论 -
SpringMVC上传文件
项目结构:一、配置SpringMVC1.web.xml springMVC index.jsp contextConfigLocation classpath*:applicationContext.xml原创 2017-07-17 18:07:07 · 387 阅读 · 0 评论 -
Maven+SpringMVC+Mybatis 整合使用教程
转载自:http://blog.csdn.net/haishu_zheng/article/details/515346891 数据库准备(1)建立一个名为mytest的数据库(2)创建表[plain] view plain copyCREATE TABLE `t_user` ( `USER_ID` int(1转载 2017-07-18 15:43:35 · 296 阅读 · 0 评论 -
使用Maven+Hibernate访问数据库
一、项目结构二、配置文件1.hibernate.cfg.xml<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dt原创 2017-07-25 11:03:13 · 1398 阅读 · 0 评论 -
SpringMVC 手动配置Bean和自动注册Bean
一、 Spring Auto Scanning Components —— 自动扫描组件 1. Declares Components Manually——手动配置component 2. Auto Components Scanning——自动扫描组件 3. Custom auto scan compone转载 2017-08-02 11:37:37 · 10391 阅读 · 0 评论