自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 JUC学习笔记:AQS原理

AQS框架首先对于syncronized,锁对象的对象头指向了一个管程,由管程负责维护EntryList和WaitSet的队列。同样的,对于我们自定义的锁,除了线程安全地获取和释放锁之外,也需要做维护这些等待队列的工作。而AQS提供的就是一个这样的维护等待队列的机制,用户只需要关注于自己的锁的释放和获取的逻辑就可以了。这就是AQS的基本功能。AQS内部维护了一个volatile修饰的state表示锁的占有状态,同时维护了一个线程等待的CLH队列。AQS将资源分为独占和共享的,因此自定义同步器只需要

2022-03-15 15:05:57 548

原创 Juc学习笔记:自定义线程池

线程池结构可以分成以上的三部分,分别是用于执行任务的线程池,一个基于生产者消费者模式的、用于平衡生产消费速率关系、存放任务的阻塞队列、以及给出任务的线程,下面对每个部分的代码进行编写阻塞队列首先思考阻塞队列中的成员变量队列的数据结构队列的最大大小用于解决并发问题的锁分别用于读写线程阻塞的条件变量所应该具有的方法获取队列大小存放任务(并发环境下,核心方法)获取任务(并发环境下,核心方法)下面给出代码,该段代码的核心是阻塞添加和阻塞获取的两个方法/** * 线程池阻塞队列

2022-03-14 16:09:04 772

原创 juc学习笔记:三种实现交叉打印的方式

使用wait/notify、await/signal、park/unparkpackage com.cui.juc;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.LockSupport;import java.util.concurrent.locks.ReentrantLock;public class ThreeWays2PrintInOrder { static Thr

2022-03-11 13:54:18 233

原创 Java学习笔记:代理模式

代理模式代理模式有三个主要的角色,分别是接口、委托类与代理类。委托类与代理类继承了同样的接口,保证他们的功能是一致的,这样在想调用委托类的时候就可以通过代理类间接地进行调用。这种间接调用带来的好处是可以使得代理类在将任务交给委托类之前可以进行一些先验的操作或者委托类实现之后实现后续的操作,就起到了方法增强的作用。根据实现方式的不同,可以分为静态代理和动态代理静态代理之所以称之为静态代理,是因为在javac编译代码之前程序就已经确定了,下面给出一个实例我们想要实现一个将两个字符串类型的数字求和并

2022-03-09 22:09:08 287

原创 JVM的类加载机制

类加载流程概述类加载器的目的通过将编译后的字节码文件的加载,生成某种形式的与Class相关的数据结构存入内存,程序可以通过这个数据结构生成对应的object对象。这个过程是在运行时进行的,这也是java实现动态拓展的根基。类的生命周期:javac编译为字节码文件加载:在方法区中生成静态数据结构、在堆中生成便于用户调用的java.lang.Class类型的对象链接:验证、准备、解析(注意解析是可以在初始化之后进行的,实现后期绑定,其他过程顺序不可变)初始化使用卸载加载加载是整个

2022-03-08 13:25:11 211

原创 操作系统学习笔记:操作系统基础及Linux所采用的解决方案

1、操作系统概念基本的概念之类的,面试很少问。以防万一在这里列个大概1.1、操作系统功能操作系统的功能可以分为以下三点作为计算机系统资源的管理者:处理器管理、存储器管理、文件管理、设备管理为用户和程序提供方便的接口:命令接口、程序接口(系统调用)与没有软件的裸机相比,硬件软件作为扩充机器构成虚拟机1.2、操作系统特征并发:线程可以并发执行共享:计算机资源允许并发执行的进程共享,分为互斥共享和同时共享虚拟:逻辑与物理的对应,如空分复用的虚拟存储器技术和时分复用的虚拟处理器技术异步:

2022-03-06 21:36:06 500

原创 插件学习笔记:Oauth2.0+SpringSecurity实现单点登录

概念单点登录(Single Sign On, SSO),指的是登录一次即可访问信任的多个服务,这在微服务的架构中是十分重要的,也是业务整合的解决方案之一。在之前的学习里学了基于SpringSecurity+Oauth2.0实现的SSO,也有基于CAS实现的SSO,在本篇文章中将SSO的Oauth2.0+SpringSecurity实现单独剥离出来,给出详细的搭建步骤。在CAS实现单点登录的章节中会有二者的对比。系统架构下图给出了基于SpringSecurity于Oatuth2.0的单点登录解决方案,该

2022-02-25 16:03:50 2655

原创 畅购商城七:基于SpringSecurity和JWT的Oauth2.0实现

系统架构存在两大类的服务器,一种是认证服务器,负责接受令牌的申请请求以及颁发令牌,传统上还会有资源服务器携带令牌在认证服务器进行校验的过程(当然我们的采用的是公钥和私钥的校验机制)在具体实现上,只要是依赖了oauth的微服务就会通过认证服务器进行校验,而如何进行认证则需要在认证服务器当中进行相关的配置认证服务器认证服务器的内容如下,包含oauth与springSecurity的配置类、Controller与Service及其实现、封装的pojo:配置AuthorizationServer

2022-02-24 15:56:06 452

原创 畅购商城六:微服务网关与jwt令牌

微服务网关对于微服务的各个服务一般会有不同的地址,外部客户端的一个服务可能要调用诸多的接口,这会带来以下的问题

2022-02-23 20:32:47 432 1

原创 插件学习笔记:跨域请求

基本概念跨域请求如果请求的发起方和发起方所请求的地址的协议、地址、端口有一个不同,就将此次请求称之为跨域请求跨域请求存在的风险下图给出了一个跨域请求所可能带来的跨域请求伪造问题,当访问了受信任的网站A之后,会在本地存储对应的用户Cookie,而未退出的情况下访问恶意网站,其也会利用这个Cookie发送恶意请求完成攻击浏览器的同源策略出于以上的考虑,跨域请求是会被阻塞的具体的阻塞方式是拦截响应,而请求本身是可以发送出去的。之所以拦截响应是考虑防止恶意网站根据响应结果进行进一步的操作(如猜密码

2022-01-04 16:09:03 324

原创 插件学习笔记:Oauth2.0

Oauth2.0是一种规范而非某一个具体的插件,它的实现可以基于SpringSecurity来完成,之所以分类在插件学习笔记里主要是想跟SpringSecurity框架和CAS进行一个对比基本概念Oauth2.0是一种授权的机制,用户信息的所有者在允许第三方应用进入特定系统的时候,为第三方发放一个短期的令牌(token),用来代替密码,供给第三方使用。令牌(token)与密码(password)相比有三点不同:令牌存在时间的限制,会自动失效,而密码是长期有效的令牌可以被数据的所有者立即撤销.

2021-12-29 19:05:20 628

原创 畅购商城五:条件查询

品牌、规格统计品牌、规格统计与前一篇的种类分组统计是一样的,只需要进行分组查询,指定terms并根据terms获取统计结果即可,因此给出代码不在赘述注意利用Bucket可以获得具体的结果public Map search(Map<String, String> searchMap) { //1.获取关键字的值 String keywords = searchMap.get("keywords"); if (StringUtils.isEmpty(keywords

2021-12-28 20:01:10 287

原创 畅购商城四:索引搜索

配置启动依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org

2021-12-28 15:22:39 146

原创 jMetal官方文档汉化八:Operator类

Operator 接口启发式算法的基础是通过应用不同的算子,从现有的个体solution中修改或生成新的个体solution。例如,EAs使用交叉、变异和选择操算子修改解决方案。在jMetal中,任何改变或生成solution(或solution集合)的操作都会实现或扩展Operator接口:package org.uma.jmetal.operator;/** * Interface representing an operator * * @author Antonio J. Nebro

2021-12-22 21:16:17 346 1

原创 jMetal官方文档汉化七:Solution类

Solution 接口当使用启发式算法时,首先要做的事情之一是定义如何对方案进行编码。编码方式在很大程度上取决于优化的问题以及需要进行的操作操作(如遗传算法的变异、交叉操作、本地搜索程序等)。因此,确定合适的编码方式对启发式算法的运行结果有着很大的影响。下图描述了jMetal 5中用于表示Solution类的基本组件:基本组件总共有三种:二进制编码、实数编码、整数编码。这种方式可以为相同的编码提供许多实现,增加了灵活性。泛型的使用还允许编译器检查错误分配变量值所导致编译错误,例如,尝试将Double

2021-12-22 20:21:27 927

原创 jMetal官方文档汉化六:架构

架构整个jMetal5架构依赖于四个接口上面的框图展示了jMetal所提供的主要功能:算法( Algorithm 类)通过使用诸多操作符(Operators类)来处理一组潜在的解决方案( Solution 类)来解决特定的问题(Problem类)。解决方案( Solution 类)表示进化算法中的个体,以及粒子群优化算法中的粒子。问题(Problem类)可以创建新的个体或粒子并对其进行评估。与之前版本的jMetal相比,取消了定义人口或群体的类。在jMetal 5中改用一个解决方案列表(Java中的

2021-12-22 15:53:37 1584

原创 jMetal官方文档汉化五:编译

编译一旦您有了jMetal的源代码,您就可以通过多种方式使用它:从IDE或从终端的命令行。IDE是最简单的可行方案,如果您习惯了该工具,那么编译和运行算法就很容易了。Intellj Idea要构建项目,选择 Build -> Make Project[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BbL5tYY7-1640156852726)(E:\Jmetal\文档汉化\中文文档\figures\BuildIJICE14.png)]Eclipse如果设置了P

2021-12-22 15:07:44 368

原创 jMetal官方文档汉化四:算法运行

运行算法要使用jMetal运行算法,您有两种选择:使用IDE或使用命令行。我们将在本节中解释这两种方法。我们首先讨论如何配置启发式算法来解决问题。配置算法在jMetal 5中,为了配置和运行算法,我们需要为此编写一个类;我们把这样的类称为runner。用外部配置文件配置算法的功能还未实现。我们为jMetal中包含的每个算法都提供了至少一个runner类。它们可以在“jmetal exec”模块的文件夹中找到https://github.com/jMetal/jMetal/tree/master/jm

2021-12-22 14:58:43 613

原创 jMetal官方文档汉化三:要求

要求jMetal是用Java实现的。从5.2版开始,我们使用了Java8的特性,因此编译该项目需要JDK8或更高版本。由于jMetal是一个Maven项目,因此该工具也是编译、测试和打包代码的必要工具。此外,如果您使用代码执行实验研究,运行R脚本并编译生成Latex文件,则需要R和Latex。...

2021-12-21 21:00:07 185

原创 jMetal官方文档汉化二:安装

安装jMetal是一个托管在GitHub中的Maven项目,因此有两种获取软件的方法:将其作为依赖项添加到Maven项目中,或者从github上获取源代码https://github.com/jMetal/jMetal.使用jMetal作为Maven/Gradle依赖项jMetal 5分为四个子模块:jmetal core:核心体系结构的类加上一些实用程序,包括质量指标。jmetal algorithm:元启发式的实现。jmetal problem:问题的实现。jmetal exec:用于配

2021-12-21 20:55:51 695

原创 jMetal官方文档汉化一:框架介绍

框架介绍jMetal项目始于2006年,旨在创建一个易于使用、灵活、可扩展和可移植的基于启发式算法的多目标优化框架。框架从2008年开始发布在http://jmetal.sourceforge.net。从2014年至今,发布于https://github.com/jMetal/jMetal.自jMetal首次发布九年后,开发者们决定在2014年对该软件进行深层次的重做,重做的主要是基于下面这些考虑:架构要重新设计,在保证原先功能的基础上力求简洁。Maven被用作开发、测试、打包和部署的工具。通过

2021-12-21 20:45:28 1098

原创 畅购商城三:Lua与canal

Lua实现广告缓存缓存架构设置两级缓存,分别是Nginx缓存和redis缓存,通过lua脚本进行查询与分支缓存实现编写lua脚本,通过Nginx的配置文件进行配置,这里使用的是OpenResty,是一个可伸缩的web平台,可以理解成封装了Nginx集成了lua脚本Nginx限流控制速率进行限流限流算法漏桶算法(Nginx所采用的)令牌桶算法Nginx限速限流配置控制并发连接数...

2021-12-17 14:45:13 2468

原创 插件学习笔记:搜索引擎ElasticSearch

ElasticSearch介绍ElasticSearch是一个实时分布式的高拓展全文搜索和分析引擎,是ELK(ElasticSearch, Kibana, Logstach的)技术的核心。ElasticSearch的优势在于模糊与全文查询,虽然关系型数据库也能够做到like关键字的模糊查询,但是会遍历整个表数据,响应很慢,因此需要使用搜索更加快捷的ElasticSearch来进行处理。主流的搜索引擎ES与Solr的相同点ElasticSearch和Solr都属于应用很广的搜索引擎,他们的基础都是L

2021-12-15 21:19:41 1475

原创 插件学习笔记:数据同步canal

Canal的作用监听数据库的数据变动,以进行一些处理,主要支持mysqlCanal工作原理Mysql的binlog模式mysql的binlog,即二进制日志(除此之外还有错误日志,查询日志慢查询日志,用于主从复制的中继日志等等)记录了所有的DDL和DML,也就是除了查询之外的语句,以事件的形式记录,还包括了语句执行的时间等信息,binlog主要有三种记录的模式STATEMENT 记录执行的语句,但是会导致数据的丢失(比如时间函数)ROW 记录变更的信息(产生大量的日志信息,canal需要使用这

2021-12-14 21:56:29 878

原创 畅购商城二:FastDFS文件上传

FastDFS简介体系架构FastDFS的架构图如上图所示,整个文件存储系统由两个部分组成,一是Tracker,二是Storage,Storage是真正地完成文件的上传存储与下载的角色,而Tracker则负责负载均衡与调度。同时Storage是会定时向Tracker发送请求,以保证Tracker知道哪些Storage是可用的文件上传流程客户端给Tracker发送链接请求之后,Tracker会查询可用的Storage,返回相应的Storage的ip和端口,而后进行文件的上传,Storage返回文件

2021-12-13 19:34:55 384

原创 畅购商城一:架构与基本CRUD

layout: pagestitle: 项目开发笔记——电商一:项目架构date: 2021-12-13 09:50:25categories: 项目开发笔记tags: 项目概述总共做了两套电商系统,从系统的架构到具体的技术栈都有着不同的技术选型,因此整理出这一个电商系列的笔记来进行技术路线的总结技术的对比,以”畅购商城“这一项目作为主线,将”品优购“作为对比,进行分析。系统设计技术栈系统架构微服务架构本项目的系统架构如下:首先从客户端发送请求作为起点出发进行叙述,客户端(P.

2021-12-13 16:51:40 755

原创 微服务架构

layout: pagestitle: JavaWeb学习笔记——微服务架构date: 2021-10-01 20:05:25categories: JavaWeb学习笔记tags: JavaWeb微服务架构介绍微服务的概念微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦**概念:**把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服.

2021-12-13 16:30:48 151

原创 Leetcode刷题笔记——动态规划

layout: pagestitle: Leetcode刷题笔记——动态规划date: 2021-06-07 09:00:08categories: LeetCode刷题笔记tags: 算法1、目标和问题——基本的动态规划1.1、回溯穷举因为每一种可能都是会得到我们所需要的结果的,所以自然而然地可以想到使用回溯算法来解决class Solution { int result = 0; public int findTargetSumWays(int[] nums, i.

2021-06-08 09:15:25 190

原创 项目开发笔记——传智健康三:图床与定时垃圾处理

概述其实本部分也是一个一对多的CRUD,与检查组单纯的字段内容所不同的是,这里涉及到图片的处理,我们首先来看一下前端是如何描述图片上传部分以及相应数据绑定的<el-form-item label="上传图片"> <el-upload class="avatar-uploader" action="/setMeal/upload.do" :auto-upload="autoUpload"

2021-06-04 15:10:54 427

原创 Java编程笔记——基于Comparator与sort的自定义排序

Arrays中有一个双参的的sort方法 public static <T> void sort(T[] a, Comparator<? super T> c) { if (c == null) { sort(a); } else { if (LegacyMergeSort.userRequested) legacyMergeSort(a, c);

2021-05-30 10:58:25 574

原创 LeetCode刷题笔记——贪心算法

一、贪心算法概述贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解,重点在于“局部”的选取二、典型例题2.1、去除重复字符串要求字典序最小,我们就尽可能地取寻找这样的子串,使得每一个字符都出现过,并且尽可能按照“abcdefg……”这样的字典升序排列拿“bcacb”来举例第一个遍历到的字符是b,我们将其存入结果中第二个字符是c,bc的结果是满足要求的,因此我们也将其存入结果中第三个字符是a,

2021-05-27 10:43:19 234

原创 项目开发笔记——传智健康项目二:简单的CRUD

目录一、前端静态页面二、数据添加2.1、前端页面2.2、检查项的数据显示2.2.1、Controller2.2.2、Service2.2.3、Dao2.3、表单提交2.3.1、Controller2.3.2、Service2.3.3、Dao三、数据分页显示2.1、前端页面2.2、数据查询2.2.1、Controller2.2.2、Service2.2.3、Dao四、数据删除4.1、前端界面4.2、数据删除4.2.1、Controller4.2.1、Service4.2.1、Dao五、数据编辑5.1、前端页面

2021-05-27 09:23:23 757

原创 项目开发笔记——传智健康项目一:项目搭建与框架配置

一、项目概述主要是一个健康体检预约的项目,简单的CRUD,文件上传、图表处理,并没有复杂的高并发等等,主要能够练习一下一些前端的知识,MVC架构的组织、dubbo的使用、SSM框架的配置与使用,能够为商城这种更好的项目做一个铺垫,还是不错的。二、技术栈三、功能架构四、环境搭建4.1、环境搭建概述本项目采用maven分模块开发方式,即对整个项目拆分为几个maven工程,每个maven工程存放特定的一类代码,具体如下:各模块职责定位:health_parent:父工程,打包方式为pom

2021-05-26 15:12:09 1003

原创 LeetCode刷题——回溯算法

一、回溯算法介绍回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。下面以一道leetcode题目为例讲解一下回溯算法的计算过程以及回溯算法解题的主要步骤。下面以一道leetcode题目来进行回溯算法的算法题解以及代

2021-05-03 17:23:18 782

原创 MyBatis学习笔记三——映射配置文件

一、Mybatis映射配置文件组成首先给出一个映射配置文件的实例<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="org.mybatis.example.BlogMapper">

2021-04-23 13:58:07 334

原创 Mybatis学习笔记二——XML核心配置文件

一、核心配置文件概述首先给出xml核心配置文件的组成部分,核心配置文件由头部生命和配置两个部分所组成,头部声明包含一下内容<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">配置部分由configuration标签包

2021-04-21 21:41:55 428

原创 Mybatis学习笔记一——Mybatis的简介与入门

一、Mybatis简介Mybatis是一种优秀的半自动ORM持久层框架,几乎免除了所有的JDBC代码以及设置和获取相关内容的操作,可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。这里有几个需要注意的问题1、为什么说Mybatis是半自动的ORM持久层框架?首先,所谓ORM(Object Relational Mapping)就是指对象关系映射,也就是说将数据映射到封装好的对象当中

2021-04-21 15:43:59 116

原创 Java学习笔记——JavaWeb三大组件之Servlet

目录一、Servlet基本概念二、Servlet的工作原理三、Servlet的接口与实现类解析3.1、概述3.2、Servlet接口及其实现类3.2.1、Servlet接口3.2.2、GenericServlet抽象类3.2.3、HttpServlet抽象类3.3、ServletRequest接口及其拓展接口.3.3.1、ServletRequest接口3.3.2、HttpServletRequest接口3.4、ServletResponse接口及其拓展接口3.4.1、ServletResponse接口3.

2021-04-19 15:25:08 138

原创 Java学习笔记——反射机制

一、反射的概述从使用上来讲,反射就是获取某一类对象的属性、构造方法和方法,并对这些属性和方法进行操作,如设置访问权限、运行方法等。效果上,反射能够提高代码的复用性,降低耦合度,因此许多的框架中都使用了反射的机制,下面就对反射的相关使用进行介绍,分别对应获取类及对类的操作、获取构造方法及对构造方法的操作、获取熟悉及对属性的操作、获取方法及对方法的操作。并最后给出一个使用实例,更好地体会反射机制所带来的代码复用性的提高。二、反射的方法概述在测试开始之前先设置一Student测试类如下所示,该测试类参考

2021-04-17 15:04:52 127

原创 Mybatis遇到的形形色色的错误

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)外在表现上,target文件没有加载xml,这是因为我把Dao类放在了java文件夹下的dao/front中,而其对应的xml只是放在resources的front中,并不一致,因此造成了这个错误这就说明Myabtis的映射配置文件的命名空间、类、变量名称、文件夹位置都要与Dao类完全一直才可以...

2021-04-16 21:45:53 266

空空如也

空空如也

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

TA关注的人

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