自定义博客皮肤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)
  • 收藏
  • 关注

原创 node.js安装步骤

我的项目使用的版本是v14.13.0,到官网下载一下二进制压缩包。下载完成后,解压压缩包到自己想要的路径。然后进行环境变量设置。经过这两步以后,使用控制台就可以查看node的版本了。系统重装node.js,记录一下步骤。

2024-06-02 14:27:12 248

原创 简单的edge浏览器插件开发记录

今天在浏览某些网页的时候,我想要屏蔽掉某些信息或者修改网页中的文本的颜色、背景等等。于是在浏览器的控制台中直接输入JavaScript操作dom完成了我想要的功能。但是每次在网页之间跳转该功能都会消失,我需要反复复制粘贴js脚本,无法实现自动化。于是我开始了解如何自动让JavaScript脚本在特定的url下生效。经过查找信息,我得知了可以通过开发一个edge的小插件来解决我遇到的需求。edge插件的核心是mahifest文件。该文件中规定了插件的版本号、插件应用的网页,引入的html、js等文件。

2024-02-16 20:12:28 968

原创 【Java】设计模式之顺序控制

如果有多个线程进行顺序打印,使用ReentrantLock的条件变量、await、sigal会能比synchronized获得更好的性能,因为synchronized每次都唤醒所有的线程。比如说有n个线程,让n个线程循环依次打印n个数字,这时候可以让ReentrantLock创建n个条件变量,每个线程对应一个条件变量。所以,想要按顺序执行,一开始让所有线程都停下来,接下来手动触发一个线程运行,并让这个线程只运行一次就结束或阻塞,并触发下一个线程运行,以此类推就能按顺序进行线程的执行。

2024-01-08 13:08:19 473

原创 【Java】设计模式之生产者/消费者

这个设计模式使用一个消息队列对生产者和消费者进行解耦。它与保护性暂停最大的区别就是它并不需要产生结果者与消费结果者一一对应,而是可以多对多。而且这个设计模式它传递消息会存在一定的延迟,而保护性暂停传递信息是十分及时的。消费者从消息队列中取消息,如果消息队列为空,消费者会进入阻塞状态;如果消息队列不为空,消费者会取出消息队列头的消息然后唤醒所有生产者。生产者将消息放入消息队列中直到消息队列满,这时候生产者会进入阻塞状态;如果消息队列不满,生产者将消息放入消息队列后会唤醒所有的消费者。

2024-01-08 13:08:04 555

原创 【Java】设计模式之保护性暂停

线程2也对保护对象加锁,当它执行完毕之后,将结果记录在保护对象的response之中然后执行notifyAll()方法唤醒线程1。线程1被唤醒,它就可以从保护对象的response属性中拿到线程2处理的结果。想要让一个线程等待另一个线程的执行结果,可以让这两个线程都关联上同一个 Guarded 0bject保护对象,让对象的管程的waitset来充当通知的桥梁,使用对象的wait()/notify()方法来进行通知。有一个结果需要从一个线程传递到另一个线程,传递只进行一次,用设计模式保护性暂停。

2024-01-07 15:25:18 668

原创 【Java】设计模式之两阶段终止

有一个场景:一个监控线程在监控计算机中的cpu使用情况、内存占用情况等信息。现在使用者不想要监控了,按下了停止按钮,如何让该线程终止?命名为两阶段终止,是因为代码中设置了两次打断。要设置第二次打断的原因是阻塞状态被打断会清空打断标志,需要重新设置一次打断才能终止线程。它的思想是,如何在一个线程T1中优雅地终止线程T2?这里的【优雅】指的是给T2一个料理后事的机会。是用来终止线程的套路。

2024-01-07 15:21:55 602

原创 【Java】JUC并发编程(重量锁、轻量锁、偏向锁)

预备:创建一个maven工程,导入lombok和logback的依赖。

2023-12-31 23:59:49 956

原创 【后端】Docker学习笔记

Java项目可以通过docker进行部署,这就需要会使用docker制造一个镜像。镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。准备一个linux服务器安装jre并配置环境变量拷贝jar包运行jar包看似,镜像中只需要jre和jar包就足够了,但是Java程序需要jre中的jvm去执行,jvm是需要跟操作系统进行交互的,所以还需要准备好具体的操作系统环境。具体来说,是操作系统的系统函数。问题来了,需要用到哪些系统函数呢?

2023-12-31 23:36:56 1522 1

原创 【Java】lambda表达式和方法引用详解(jdk1.8新特性)

当匿名内部类的引用传递给接口类型或者抽象类类型,如果发现类型是函数式接口,那很明显匿名内部类重写的方法必定是函数式接口的唯一方法,因此,匿名内部类的写法可以得到简化。如果某个lambda表达式中,只有一个类调用了它的静态方法,并且传入静态方法的参数与lambda表达式的参数类型一致,那么可以使用方法引用进行简化。lambda表达式是对函数式接口的匿名内部类的简化,那lambda表达式之中创建的对象、调用的方法是否有机会进行简化呢?lambda表达式是用来简化函数式接口的匿名内部类的写法的。

2023-12-25 15:00:00 1053

原创 【Java】MybatisPlus

mybatis-plus

2023-12-25 12:07:40 1548 3

原创 【Java】springboot

只需要导入mybatis和mysql的依赖,然后在springboot的配置文件中编写数据源,然后为数据层接口添加注解@Mapper,接下来为接口中方法添加各种mybatis注解/编写sql映射文件,就可以调用接口中各种方法执行数据库查询操作了。一个是继承的依赖starter-parent,springboot最基础的依赖,springboot所有的东西都建立在其之上。另外,starter-web这个依赖中存在starter这个依赖,如果不添加start-web依赖,也必须要添加start依赖。

2023-12-24 16:15:38 819

原创 【Java】springmvc

然后在这个类中写方法拦截异常。注意:这个类要被springmvc的配置类加载到。然后要在这个类的方法中写一个注解:@ExceptonHandler,里边写上表现层抛出的异常类型,根据异常类型到这个方法中执行。

2023-12-24 16:15:01 970

原创 【Java】spring

spring的核心作用就是管理bean。==只需要将实现类注解成bean就可以了接口不用注解成bean。==使用的时候只使用接口。因为spring会根据接口自动获取实现类注入接口。

2023-12-22 22:09:11 1860

原创 【Java】Mybatis

JavaEE三层框架:表现层、业务层、持久层。现在开始学习持久层。持久层就是负责与数据库打交道的代码。框架:就是一个半成品软件。在框架的基础上,可以更加高效地写出代码。

2023-12-22 15:00:00 817

原创 【Java】Maven

如果模块1是模块2、模块3、模块4的父模块,模块2、模块3共用一些依赖,提到父模块之中去;模块3、模块4共用一些依赖,也提到父模块之中去。把想要聚合的所有模块放入聚合模块之中,并且把这些模块写入聚合模块的pom文件之中(不是依赖引入,而是在。又出现了一个问题:多个模块中如果引入了大量相同的依赖,不仅增加了代码量,而且管理起来很麻烦(要改动某一个依赖的版本需要把所有相同依赖的版本都更新一遍),于是就有了继承的思想。所以,想要在一个模块中使用另一个模块中的内容,可以在模块的pom文件中导入被引用模块的坐标。

2023-12-21 09:15:45 865

原创 【Java】MySql

查询数据库创建数据库CREATE DATABASE 数据库名称;-- 更好地创建数据库CREATE DATABASE IF NOT EXISTS 数据库名称;删除数据库DROP DATABASE 数据库名称;-- 更好地删除数据库DROP DATABASE IF EXISTS 数据库名称;使用数据库-- 查看当前正在使用的数据库-- 使用数据库USE 数据库名称;上边是DDL定义数据库,接下来是DDL定义表查询表-- 查询当前数据库下所有表。

2023-12-21 09:14:55 930

原创 【Java】反射

反射是一种非常强大的机制。反射跟注解配合,就天衣无缝了。动态语言和静态语言**动态语言:**是一类在运行时可以改变其结构的语言.例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。动态语言主要有JavaScript、python、c#等。**静态语言:**与动态语言相对应,运行时不能改变的语言称为静态语言。静态语言主要有C、C++、Java。

2023-12-20 11:10:30 1109

原创 【Java】注解

不是程序本身,但是可以对程序作出解释(这一点跟注释没有什么区别),但是注释没有功能,注解是有功能的可以被其他程序(编译器等)读取可以在package、class、method、field等上面使用注解,相当于给这些东西添加了额外的辅助信息,可以通过反射机制实现对注解的访问使用@Interface可以自定义注解。它会自动继承java.lang.Annotation接口。

2023-12-20 11:07:12 875

原创 【JVM】9.自动垃圾回收(垃圾回收器)

比如吞吐量99,说明用户执行时间占99%,垃圾回收的时间占1%)。(默认45%)),就会触发混合回收Mixed GC,回收年轻代中所有Region的垃圾对象和老年代中部分Region的垃圾对象以及老年代中Humongous区中的所有对象。HotSpot之中垃圾回收器分为年轻代和老年代,年轻代和老年代有着不同的垃圾回收算法实现,除了最特殊的G1垃圾回收器以外,其他垃圾回收器都必须两两配对使用(年轻代和老年代)。G1垃圾回收器可以说整合了jdk8之前的垃圾回收器的优点,jdk9之后强烈推荐使用G1垃圾回收器。

2023-12-17 08:47:18 419

原创 【JVM】8.自动垃圾回收(垃圾回收算法及原理)

(每次创建都在From中创建,要回收了,就把From中还有用的放到To,然后把From一窝端,互换From和To的名字。当整个新生代的空间都被使用时,先尝试Minor GC,把未达到年龄阈值但是最老的对象放入老年代,如果老年代空间也被占满了,会触发Full GC(尝试回收整个堆的对象,老年代中的对象会被清理)。注意:每次Minor GC会增加未被清理的对象的年龄,如果对象的年龄达到阈值(最大15,默认值和垃圾回收器有关),对象就会被晋升至老年代。没有最好的垃圾回收算法,只有最适合的垃圾回收算法。

2023-12-13 10:00:00 281

原创 【JVM】7.自动垃圾回收(五种引用方式)

当内存不够用,哈希表中软引用存放的学生数据会被回收,此时只需要获得软引用队列,弹出已经被回收数据的软引用,从哈希表中移除键值对,之后软引用也会被回收。可达性分析算法中描述的引用,一般都是强引用,即是GC Root对象对普通对象有引用关系,只要这层关系存在,那么普通对象就不会被回收。上文说到,如果一个对象在它的引用链上没有GC Root对象,那么这个对象就可以被回收,如果有GC Root对象,那么这个对象就不能被回收。对象本身没有软引用,如果想让一个对象软引用,需要new出一个软引用。保存想要软引用的对象。

2023-12-13 09:00:00 149

原创 【JVM】5.运行时数据区(堆、方法区、直接内存)

程序计数器、虚拟机栈、本地方法栈是线程不共享的。每一个线程都有自己的程序计数器、虚拟机栈以及本地方法栈。堆、方法区是线程共享的。不同线程共享堆和方法区。因为静态变量是在堆中的,所以静态变量是线程共享的。

2023-12-12 10:00:00 35

原创 【JVM】6.自动垃圾回收(方法区回收、堆回收)

查看GC Root,可以使用arthas的heapdump命令先生成一个堆内存快照,然后使用专门的工具去打开快照文件。

2023-12-12 10:00:00 175

原创 【JVM】4.运行时数据区(程序计数器、虚拟机栈)

方法调用就入栈,方法结束就出栈。记录了每个变量的编号(第几个变量),PC开始位置,以及长度(其实就是作用域,PC可以访问多长的位置,超过这个长度就不能使用这个变量了),在数组中的索引(序号),变量的名字。显然,栈帧中局部变量过多,会引起局部变量表过大,操作数栈深度变大,也会影响一个栈帧的大小,从而影响虚拟机栈能够存放栈帧的个数。:当前类的字节码指令引用了其他类的属性或者方法时,需要将符号引用(编号)转换成对应的运行时常量池中的内存地址,动态链接就保存了编号到运行时常量池的内存地址的映射关系。

2023-12-11 21:30:26 44

原创 【JVM】2.字节码文件详解

常量池里边其实也是有分类型的:字符串对象(保存着指向字符串常量的编号)、方法名、类名、字符串常量。类加载器Classloader、运行时数据区域(JVM管理的内存)、执行引擎(即时编译器、解释器、垃圾回收器等)、本地接口(本地已经编译的方法比如虚拟机中提供的c/c++方法)。字节码文件是以二进制进行存储的,win上的记事本、notepad++等软件都无法打开查看。方法区域是存放字节码指令的核心位置,字节码指令的内容存放在方法的code属性之中。在学这些之前,先了解一下输入JVM的字节码文件是怎么回事。

2023-12-11 21:15:54 153

原创 【JVM】3.类加载器

这样一来,一个类或者接口就这样被JVM加载到内存中了。(2)类的连接阶段连接阶段可以分为三个步骤:验证、准备、解析。

2023-12-01 22:05:08 37

原创 【JVM】1.初识JVM

JVM本质上是一个程序,它的职责是运行Java字节码文件(.class)。源代码文件是.java,使用javac编译(javac是Java编译器的前端部分,这个过程主要是进行语法检查,不涉及性能优化),变成Java字节码文件.class,之后JVM将.class文件解释为机器码。通过不同平台上的不同JVM将字节码文件解释成对应平台的机器码,能够让Java源代码“一次编译,到处运行”。

2023-12-01 11:13:15 39

原创 【运筹优化】粒子群算法(PSO)实现等误差直线逼近复杂曲线(附PSO Java源码)

曲线逼近、粒子群算法源码。

2023-11-30 09:23:06 1191

原创 【车间调度】车间调度甘特图可视化(html+css+js源码)

按下按钮后可以展示全部工序。按下按钮后可以展示工序加工顺序。点击某一个作业可以高亮该作业的所有工序。界面可以选择导入的txt文件。文件格式为:每一个工序的信息在括号中表示,分别为工序编号,工序释放时间,工序完工时间。用“|”分隔每个机器的所有工序(工序需要按照释放时间进行升序排序)。scheduleShow.htmlscheduleShow.css

2023-11-29 16:48:25 772 1

原创 git安装与配置

重装系统后,需要重新安装git。做一下记录。

2023-11-03 11:46:09 195

原创 车间调度问题分类

单机调度问题(Single Machine Scheduling Problem,SMP),只有一台机器,有n个待加工工件。需要安排这n个工件在这台机器上的加工顺序,使得某些指标最优。这个问题本质上是对元素为n的序列进行全排列,并在全排列中找到最优解。

2023-10-19 21:38:44 873 1

原创 【几何】二维线段平移特定距离

我们得到了两条式子用来求AB向左边平移特定距离d之后得到的线段起点和终点坐标。的单位向量,将该单位向量使用逆时针旋转矩阵进行旋转90度。如图所示,红色向量为。的单位向量(可求),将这些已知量和可求量代入上面两条式子,可以得到求点。我们现在要将该矢量往它的方向的左边平移距离。的单位向量逆时针旋转90度得到的向量。,并且获得平移之后的线段起点坐标。假设有一条线段AB的起点坐标为。是逆时针旋转矩阵(已知),,这条线段所表示的矢量为。点坐标实际上表示的是向量。,将旋转之后的单位向量。为点A的坐标(已知),

2023-06-26 10:31:24 881 6

原创 【深度学习】正则化方法——dropout

在pytorch之中,使用dropout的方法很简单,在全连接层和激活层的后面加上dropout层即可。所谓dropout,是指在神经网络之中每一次前向传播都随机以一定的概率将一些神经元丢弃。按照这个公式来看,dropout就是以一定概率将一个值置为0,否则将这个值放大。是一个范围在0到1之间的超参数,表示dropout的概率。一般用于全连接层输出之后。

2023-05-29 21:55:27 291

原创 【深度学习】正则化方法——L1和L2正则化

凡是能解决模型泛化误差而不是训练误差的方法,都被称为正则化。模型的泛化误差主要是由模型过拟合引起的,所以正则化的各种方法用于解决模型过拟合的问题。

2023-05-27 22:41:35 2564 1

原创 如何从拉格朗日乘数法一步步到达KKT条件

虽然小学生和初中生不一定看得懂,但是高中以上学历肯定看得懂,确定不进来看看嘛~

2023-05-16 17:48:38 1309 2

原创 【深度学习】模型超参数选择/过拟合、欠拟合

一个拥有1000个隐藏层的多层感知机,它对于XOR类型的模型而言是高容量的,它可以轻松记住所有训练数据,甚至可以完美贴合所有训练数据(即模型误差(损失)接近0)。测试数据集:全新的数据集(甚至不知道标签是什么),理论上只用一次,绝对不能使用这种数据集来调超参数。验证数据集:从训练数据集中单独抽出来(这一部分不再参与训练)的数据集。)通过这种方式可以更加充分利用数据集的信息,在设定的超参数下得到的平均损失才更有代表性。单层感知机对于XOR类型的数据而言是低容量的,它无法对这些数据进行拟合。

2023-05-10 13:06:20 462

原创 【深度学习】从感知机到多层感知机,以及多层感知机(MLP)的实现

因为如果不激活,隐藏层输出的将会是一个线性组合,整个网络拟合出的函数还是一个线性空间。损失函数相当于拿计算的结果与真实的标签作比较,发现符号相反就输出1(分类失败),发现符号相同就输出0(分类成功)。多层感知机经过反复输出预测值、计算损失、梯度下降之后,第一层的两个单层感知机就会逐渐变成与运算,而第二层会逐渐变成或运算。可以看到,网络的第一层分别是两个单层感知机。还是假设样本有两个特征。接下来,我们使用构建拥有一层隐藏层的多层感知机,并使用ReLU作为激活函数,训练一个多层感知机模型来解决多分类问题。

2023-05-08 09:15:40 1294

原创 【深度学习/机器学习】Softmax回归

开始之前,需要了解信息论的一些基本概念。

2023-05-04 23:32:42 287

原创 【深度学习\数学建模】多元线性回归模型

但是也有缺点:每次只取一个样本,信息量大幅度减少,训练出来的模型不够准确。去求损失函数、进行梯度下降更新参数,对求解时间和求解质量进行了权衡处理。所以,我们采用小批量梯度下降进行参数的迭代。都是标签求和之后对参数的梯度,“求和”这一操作,在样本数量多达数十万乃至上百万的时候,是非常耗性能的。优点是利用了样本和标签的所有信息,最后训练出来的模型是最准确的。上边知道了如何训练出一个线性回归模型,还有一些细节值得琢磨。这两个公式从减少计算时间的角度看,是可以继续优化的。上边这种求法,被成为。

2023-05-03 09:56:41 921

原创 【深度学习】pytorch自动求导

上述计算中,当x通过pytorch内置的一些运算得到y的时候,其实计算图就已经被构建起来了。接下来,计算x在另一个函数中的梯度。

2023-05-02 17:43:12 264

空空如也

空空如也

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

TA关注的人

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