自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (4)
  • 收藏
  • 关注

原创 java验证公钥私钥是否匹配及公钥私钥与字符串相互转换

本文记录使用java生成公钥私钥,将公钥私钥转换成字符串,验证公钥私钥是否匹配。验证公钥私钥是否匹配的思想:使用公钥对字符串进行加密,再使用私钥进行解密,若解密生成的字符串与原字符串一致,则说明公钥私钥匹配。引入第三方依赖bouncycastle: <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15

2022-02-06 16:48:33 7643

原创 代理模式(静态代理和动态代理)与SpringBoot AOP实现

代理模式代理模式分为静态代理和动态代理。代理模式类似现实世界中的中介,比如租房,中介会为双方提供公共服务,如出租房屋、看房、签合同、收取费用等;通过中介(代理),业务双方就不用操心这些繁琐的事务,房东只要将钥匙交给中介,从中介那里收租金;房客只要从中介那里拿房子,交钱给中介即可。其他事情有中介办妥。静态代理静态代理中的角色:1.抽象角色:业务的抽象,如租房这一业务,通常由接口或抽象类来实现2.真实角色:被代理的角色,如房东3.代理角色:代理真实角色,为业务双方提供服务,执行操作4.客户:访问

2021-09-01 15:49:57 748

原创 Java并发编程(六):任务取消、中断与关闭

这一节介绍并发编程中如何对任务执行取消操作。java中没有提供停止线程的方法,只用通过协作——使代码遵循一定的协议来请求取消。轮询检查一种常见的取消任务的办法是轮询检查。线程在执行的过程中通过定期检查一个boolean变量来决定是否终止任务。下面是一个使用轮询检查来终止素数生成的例子:public class PrimeGenerator implements Runnable { private static ExecutorService exec = Executors.newCache

2021-08-17 11:47:49 1565 1

原创 Java并发编程(五):执行并发任务

Executor框架适用面Executor框架代替Thread以实现更灵活的执行策略,Executor基于生产者-消费者模式,对任务提交和执行进行了解耦。使用Executor的线程池实现web server实例:public class TaskExecutionWebServer { private static final int NTHREADS = 100; private static final Executor exec = Executors.n

2021-08-12 11:58:52 326

原创 Java并发编程(四):构建并发程序的机制

迭代和ConcurrentModificationException在使用迭代器或for-each对同步容器(Vector和Hashtable)进行迭代时,倘若容器在迭代期间被修改,会抛出一个ConcurrentModificationException异常。避免这个异常的常用方法是给迭代加锁,例:public List<E> list = Collections.synchronizedList(new ArrayList<E>());synchronized(list){

2021-08-11 11:30:23 149

原创 Java并发编程(三):组合与扩展线程安全类

这一节介绍:实现线程安全组件的常用方法如何使用线程安全的组件来组合新的组件并避免线程安全问题如何扩展已有线程安全类即使一个类中的对象不是线程安全的,但仍有许多办法将其安全地用于多线程程序。常用的方法有线程封闭、使用锁来保护对状态变量的所有的访问。java监视器模式常用的避免线程安全问题的方法:在一个类中封装所有状态变量(都是private的),并且对于访问变量的方法都使用了同步。这种模式也被称为java监视器模式。除了使用对象内部锁,还可以使用私有锁来对状态进行保护,例:public c

2021-08-09 11:39:31 112

原创 Java并发编程(二):共享对象

可见性我们希望一个线程在修改了一个可变状态之后,这一修改对其他线程是可见的,而这仍然由同步来实现。倘若没有同步,一个线程在修改一个可变状态时,另一个线程可能读取到过期的值;除此之外,未同步的多线程会有重排序现象,即JVM为了提高效率,在执行多线程时并不是按照代码编写顺序执行的,执行顺序可能出乎预料。线程封闭与synchronized不同,synchronized通过线程等待来完成同步,避免共享数据带来的线程安全问题;而线程封闭的解决办法是不共享数据,即数据的使用在不同线程之间是隔离的,只有在本线程之

2021-08-06 11:46:54 107

原创 Java不可变对象

不可变类指的是其实例不可被修改的类,它更易于设计、实现和使用。不可变类应该遵循如下规则:保证类不会被扩展,一般的做法是将类声明成final的,当然还有其他方法不要提供任何修改对象状态的方法(如setter)声明所有的成员变量都是private和final的如果类具有指向可变对象的成员,则确保客户端无法获得该对象的引用,并且永远不要用客户端提供的引用对象来初始化这些属性,也不要从任何访问方法中返回该对象引用。在构造器、访问方法和readObject方法中使用拷贝性保护技术。例:public f

2021-08-06 11:40:04 769

原创 Java并发编程(一):线程安全

线程安全编写线程安全代码的本质就是对状态的管理,即那些共享的、可变的状态。线程安全问题的本质是多个线程访问同一资源,这会产生隐患,解决的方法有三种:不要跨线程共享变量使状态变量为不可变的在访问状态变量时使用同步线程安全的定义:如果一个类能被多个线程安全的使用,那么它就是线程安全的。或者说,一个类在被多个线程访问时仍然能做出正确的行为。原子性:就是一个事务要么全部执行,要么一点也没有执行,不存在其他状态。要保证线程安全就要保证事务是原子地执行。要使变量为原子的,可以使用java.util.c

2021-08-05 11:40:04 107

原创 Java保护性拷贝

对于不可变类,我们在构造器中或方法返回引用对象时要考虑进行保护性拷贝。下面是一个不安全的例子:public final class Period{ private final Data start; private final Date end; public Period(Date start, Date end){ //此处省略参数有效性检验。。。 this.start = start; this.end = end;

2021-03-12 18:55:34 257

原创 Java对象通用方法equals,hashCode,toString以及Comparable接口

总括:1.覆盖equals方法时请遵守通用约定2.覆盖equals时应同时覆盖hashCode方法3.始终要覆盖toString方法4.考虑实现Comparable接口1.覆盖equals方法时请遵守通用约定不用覆盖equals的情况:(1)类的实例本质上是唯一的(2)类没有提供“逻辑相等”的功能,object的默认实现是引用相同(3)超类已经覆盖了equals,且超类的行为对于这个类也是合适的(4)类是private或protected的所以,当类具有逻辑相等的概念并且超类没有覆盖e

2021-03-04 17:47:01 381 1

原创 Java创建和销毁对象的一些技巧和注意事项

总括1.使用静态工厂方法代替构造方法2.当构造函数有很多参数时考虑使用构建器3.用私有构造器或枚举类型实现单例模式4.在想让一个工具类不被实例化的时候使用私有构造函数5.优先考虑使用依赖注入来引用资源6.避免创建不必要的对象7.消除不必要的对象引用8.避免使用finalize和clear方法9.try-with-resources优先于try-finally1.使用静态工厂方法代替构造方法如将boolean转成Boolean对象的方法:public static Boolean va

2021-03-02 19:48:08 400 2

原创 SpringBoot简单入门(使用vscode)

SpringBoot的作用是整合整个Spring框架各个技术栈,省去繁琐的项目配置。vscode配置Spring Boot和maven详见这里:VsCode搭建springboot 并配置maven环境Hello World使用Spring Boot的开发流程:1.创建Spring Boot工程及引入依赖vscode创建spring工程后需等待一段时间进行导入。创建工程时要选择依赖,web开发选择如下的包:DevTools(代码修改热更新,无需重启)、Web(集成tomcat、SpringMV

2021-01-10 20:35:54 1587 1

原创 Java Swing(九):弹出窗口

简单对话框JOptionPane对话框一般用于消息提示和读取用户输入(交互),可以给控件添加对话框。之前用到的消息窗口就是对话框。常用的几种对话框:1.showMessageDialog()//消息提示2.showConfirmDialog()//消息确认,用户选择是或否例:JOptionPane.showConfirmDialog(this, “请确认是否删除”);//返回一个整数0/1/2代表用户选择的选项3.showInputDialog()//数据输入,返回一个字符串为用户输入4.sho

2020-10-10 21:44:50 2234

原创 Java Swing(八):菜单栏的使用

菜单栏主要的类:JMenuBar(菜单项), JMenu(菜单), JMenuItem(菜单项)代码例://添加菜单 JMenuBar menubar = new JMenuBar(); this.setJMenuBar(menubar); //添加菜单项 JMenu fileMenu = new JMenu("文件"); menubar.add(fileMenu); fileMenu.add(new JM

2020-10-09 21:56:35 371

原创 Java Swing(七):鼠标事件MouseEvent

鼠标事件MouseEvent可以给控件/界面添加鼠标事件有三种监听器:1.addMouseListener 点击,按住,抬起,移入,移出2.addMouseMotionListener 移动,拖动3.addMouseWheelListener 鼠标滚轮转动MouseListener接口下要覆盖五个方法:mouseClicked,mouseEntered,mouseExited,mousePressed,mouseReleased分别对应不同的鼠标事件。对于鼠标事件MouseEvent的常用方法:

2020-10-08 19:29:33 5479

原创 Java Swing(六):使用图标

将图片用于控件import java.net.URL;代码示例://1.创建一个Box作为顶层容器Box root = Box.createHorizontalBox();this.setContentPane(root);//2.在当前src文件夹中创建一个包images,将图片放入其中//3.使用URL获取图片的存放位置URL url = getClass().getResource("/images/tmp01.jpg");//4.创建ImageIconIcon icon = n

2020-10-07 08:51:03 331

原创 Java Swing(五):边框

边框Border接口Border可以用于给控件设置边框。import javax.swing.border.*;方法一:Border b1 = new LineBorder(Color.BLUE, 4);//4为边框的宽度a1.setBorder(b1);//setBorder方法用于给控件设置边框方法二:Border b2 = BorderFactory. creatLineBorder(Color.BLUE, 4);a2.setBorder(b2);其他各式边框特种边框Matte:

2020-10-04 21:27:56 354

原创 Java Swing(四):布局管理器

流布局FlowLayout流布局是控件按行排列,排满则换行。设置布局类型:LayoutManager layout = new FlowLayout(FlowLayout.LEFT);//参数LEFT表示左对齐,改为CENTER为居中对齐,默认是居中contentPane.setLayout(layout);边界布局BorderLayout控件按照上下左右中5个位置放置。在添加控件时可以指定位置:contentPane.add(a1,BorderLayout.PAGE_STRAT)这里有五种参

2020-10-02 21:48:45 274

原创 Java Swing(三)文本相关控件JLabel,JTextField,JTextArea,JCheckBox,JComboBox

标签JLabelJLabel用于显示短文本或图标,常用方法:1.setText()//设置文本2.setFont()//设置字体例:label.setFont(new Font(“微软雅黑”,0,14));3.setForeground()//设置颜色例:label.setForeground(Color.BLUE)4.setToolTipText()//设置提示文字其他方法:setOpaque(true)//设置背景为不透明setBackground(Color.RED)//设置背景颜色

2020-09-27 21:06:39 1425

原创 Java面向对象笔记(详细)

面向过程程序设计以功能分解为基础设计软件系统,它的缺点:代码中数据结构和和功能可重用性差;软件可维护性差;它适合小程序,单个算法或很成熟的系统;而不适合大型系统或需要频繁变化的系统。面向对象程序设计步骤:1.确定系统中接收消息的对象;2.确定每个对象上执行消息的操作;类和类之间的关系:1.相互独立2.通过继承建立联系3.通过type(interface)建立联系,通过接口(interface)实现多继承封装面向对象程式设计中,封装(Encapsulation)就是把类的内部与外界隔离起来,把

2020-09-24 22:29:07 385

原创 Java Swing(二)按钮点击事件处理ActionListener

监听器监听器Listener是Java Swing中界面事件处理的一种方式。import java.awt.event.*;使用步骤:1.写一个自己的监听器类实现ActionListener接口,重写actionPerformed方法这里的MyButtonListener类是MyFrame的一个内部类private class MyButtonListener implements ActionListener{ @Override public void act

2020-09-23 22:34:38 5905

原创 Java Swing(一):入门实例

一段简单的程序:import javax.swing.*;import java.awt.*;public class demo01 { public static void main(String[] args) { JFrame frame = new JFrame();//JFrame表示一个窗口 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//表示右上角叉叉关闭程序

2020-09-21 08:05:53 292

原创 对于Java数组和对象数组内存分配的理解

Java中数组的内存分配关于数组变量:本质上,数组变量是数组的管理者而非数组本身;数组变量之间的赋值是管理权限的赋予;数组变量之间的比较是判断是否管理同一个数组。所以要由一个数组得到一个和它完全一样的数组,要采用遍历赋值的方法。Java一维数组的内存分配堆区中分配空间后会把每个数组元素初始化为0。array是引用变量,它在栈区占用的空间大小为4bytes。由此可以看出,数组变量其实就是指针。它存储着数组元素在堆区的首地址。Java中对象数组的内存分配创建对象数组:Departmen

2020-07-26 16:49:05 626

原创 并行计算(三):并行计算效能的评估

一、加速比(speedup factor):S§=Ts/TpTs为最优顺序算法的执行时间;Tp为使用p个处理器并行计算所花费的时间。不能达到最佳效果(理论值)的原因:1.不是每一部分的计算都能够并行优化2.在并行化的过程在可能需要额外的计算或操作(如同步造成的开销)3.进程间通信需要时间(这常常是主要原因)二、系统效率(system efficiency)为了将处理器的数量纳入评估,对加速比进行改进:E§ = Ts/(p*Tp) = (S§/p)*100%绘制如下图形:三、strong s

2020-06-28 10:55:59 5136

原创 并行计算(二):并行模型的分类

一、Flynn分类法single instruction multiple data(SIMD):GPU,专注于单一任务,并具有很高的效能;multiple instruction multiple data(MIMD):CPU,同时及处理多个不同的任务,但是系统复杂的也随之升高;其他类型(不常见):SISD(单核处理器),MISD。二、从内存的角度分类1.共享内存:多个CPU共享一个存储空间2.分布式内存:微机集群,超级计算机(注重计算性能),数据中心(注重数据的存储,调度,服务)对于后者,不

2020-06-27 09:08:50 1963 1

原创 并行计算(一):简介

一、什么是并行计算?并行计算就是运用多个处理器(如core) 来解决一个问题。二、并行计算和分布式计算的区别它们都会调用多个计算资源。但是它们的使用背景和场景不同。并行计算:在解决一个大问题(如科学计算中的仿真模拟)时集中调用多个计算资源,强调的是尽可能提升计算资源的使用效率。(如超级计算机和微机集群,计算资源通常集中管理和调度)分布式计算:强调的是资源的共享,资源的使用者可以通过分布式系统远程使用计算资源。(如云计算,数据中心可以分布在世界各地,通过网络完成资源共享)三、为什么需要并行计算?很

2020-06-25 22:13:21 2840

IT项目管理课件.zip

软件工程-IT项目管理课程PPT

2021-12-08

OpenGL入门教程.doc

OpenGL入门教程.doc

2021-12-08

MCM2021B_data.zip

2021年美赛B题澳大利亚东部(新南威尔士和维多利亚)火灾频率分布数据(2010-2020)

2021-02-09

UCI经典二分类数据集.zip

Exel版UCI机器学习二分类数据集

2021-01-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除