- 博客(178)
- 资源 (7)
- 收藏
- 关注
原创 07-Java异常分类以及处理机制
因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。例如,Java 虚拟机运行错误(Virtual MachineError),当JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。javac 在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。可以被Java异常处理机制使用,是异常处理的核心.。:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。catch语句块来处理。
2023-02-14 17:51:00
605
原创 06-PS中的四种蒙版
Photoshop中的蒙版就是遮罩的意思,主要作用就是将其所在的图层,把不同的明暗度转化成相应的透明度。黑色为完全透明,灰色为半透明,白色为完全不透明。添加蒙版有便于灵活修改,不影响图层原貌。PS蒙版有四类:图层蒙版、剪切蒙版、矢量蒙版、快速蒙版。
2023-02-11 23:54:28
6484
原创 05-PS使用中性灰、双曲线加深减淡方法
时间问题, 只修了一点,所以效果不是很明显. 中性灰修图一般是照片要求放大很多倍比如做广告海报时才使用, 平时发朋友圈就没必要了,太费时了。3.还可以建立观察组,通过设置为黑白, 双曲线提亮暗部压暗暗部等操作, 方便观察明暗差异。2.然后就可以使用白色画笔进行提亮, 黑色画笔进行压暗, 注意灵活控制透明度和流量就行。4.使用白色画笔进行提亮, 黑色画笔进行压暗, 修图效果对比。4.需要提亮的区域就在提亮曲线的蒙版中用白色画笔涂抹进行提亮。反之需要压暗的区域就在压暗曲线的蒙版中用白色画笔涂抹进行压暗。
2023-02-11 19:23:06
860
原创 04-PS人像磨皮方法
这个方法和高斯模糊差不多, 首先我们知道 图片=细节+光影, 我们通过反向高反差, 得到细节图层, 将细节图层进行一个高斯模糊后, 然后反向并设置蒙版, 通过画笔涂抹来控制减去细节的量, 就得到磨皮效果.图片=细节+光影, 高低频磨皮通过分离图片的细节(高频)和光影(低频), 两个图层单独进行处理, 细节光影互不影响, 可以结合上面两种方法, 效果就比较好。复制磨皮前的图层(祛痘这个图层), 混合模式设置为线性光, 图层顺序并移动至最顶层, 设置为高反差保留,数值设置在刚好能看清细节就行。
2023-02-11 17:10:40
2542
原创 03-PS图层混合模式
原图效果调整复制的图层的曲线图层模式菜单正常模式下编辑每个像素,都将直接形成结果色,这是默认模式,也是图像的初始状态。在此模式下,可以通过调节图层不透明度和图层填充值的参数,不同程度的显示下一层的内容溶解模式是用结果色随机取代具有基色和混合颜色的像素,取代的程度取决于该像素的不透明度。下一层较暗的像素被当前图层中较亮的像素所取代,达到与底色溶解在一起的效果。但是,根据任何像素位置的不透明度,结果色由基色或混合色的像素随机替换。因此,溶解模式最好是同PS中的一些着色工具使用效果比较好,如画笔工具
2023-02-07 22:00:42
666
原创 02-PS工具栏介绍
(2)修复画笔(手动取样)——灵活按Alt——取要修的部分附近取样,然后再点击修复部位使用时会根据覆盖的位置本身的明暗变化及颜色状态进行融合,这时可以让画笔的硬度稍微低一点儿,从而达到边缘的柔和勾选对齐后,要跟随鼠标上下左右移动描绘人物或者取样点附近。主要用于擦除颜色(其实是像素),就是把你不要的那块给擦除,用它来擦图的时候,擦过的地方会是透明的,如果下面还有一层图的话,会透出下层图的内容,但在背景层上擦的时候,就无法擦除背景色。用这款工具可以统计画面中一些重复的元素,是款不错的统计及标示工具。
2023-02-07 20:42:42
3786
原创 06-Arrays.sort 和 Collections.sort 实现原理和区别
然后还有混排(Shuffling)、反转(Reverse)、替换所有的元素(fill)、拷贝(copy)、返回Collections中最小元素(min)、返回Collections中最大元素(max)、返回指定源列表中最后一次出现指定目标列表的起始位置( lastIndexOfSubList )、返回指定源列表中第一次出现指定目标列表的起始位(IndexOfSubList )、根据指定的距离循环移动指定列表中的元素(Rotate);再来看看Arrays.sort方法。
2023-02-06 22:26:37
434
原创 05-Java反射机制
(5) 这3种方式,最终在JVM堆区对应类的java.lang.Class对象都属于同一个,也就是内存地址相同,进行==双等号比较结果为true,原因是JVM类加载过程中使用的是同一个ClassLoader类加载器加载某个类,不论加载多少次,生成到堆区的java.lang.Class对象始终只有一个,除非自定义类加载器,破坏JVM的双亲委派机制,使得同一个类被不同类加载器加载,JVM才会把它当做两个不同的java.lang.Class对象。我们可以通过这个对象看到类的结构。
2023-02-06 17:29:23
319
原创 04-String、StringBuffer和 StringBuilder的区别?
简单的来说:String 类中使用 final 关键字字符数组保存字符串,private final char value[],所以String 对象是不可变的。而 StringBuilder 与StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串 char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。
2023-02-03 23:34:35
327
原创 01-使用Camera Raw滤镜调色
在图片后期时常常需要将图像进行放大或缩小,在进行这种变形操作的过程中,如果是非智能对象变化后像素会有丢失,而智能对象会保留所有图层的细节不会有损失。养成好习惯, 每种操作都建立新图层来进行, 这样如果修坏了, 直接把该图层删除就行了, 还原图片比较快捷。打开色彩平衡, 这一步是让高光处(上半部分)尽可能呈现暖色调, 阴影处(下半部分)呈现冷色调。2. 将新产生的图层1转换为智能对象, 并用Camera Raw滤镜打开。1.我使用的是ps2018, 打开原图, 图层名字可以自定义。都是提亮亮部, 压暗暗部。
2023-01-20 20:31:08
3105
原创 03-为什么局部内部类和匿名内部类只能访问局部final变量?
这里就出现了一个矛盾:内部类对象访问了一个不存在的变量。为了解决这个问题,就将局部变量复制了一份作为内部类的成员变量,这样当局部变量死亡后,内部类仍可以访问它,实际访问的是局部变量的"copy"。这样就好像延长了局部变量的生命周期。就将局部变量设置为final,对它初始化后,我就不让你再去修改这个变量,就保证了内部类的成员变量和方法的局部变量的一致性。3.将局部变量复制为内部类的成员变量时,必须保证这两个变量是一样的,也就是如果我们在内部类中修改了成员变量,方法中的局部变量也得跟着改变,怎么解决问题呢?
2023-01-12 22:00:42
259
原创 02-final、finally、finalize的区别?
4.finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,无论finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定好的;1.被final修饰的变量不可以被改变,如果修饰引用,那么表示引用不可变,引用指向的内容可变. 被修饰的常量,在编译阶段会存入常量池中.5.垃圾回收和finalize()都是靠不住的,只要JVM还没有快到耗尽内存的地步,它是不会浪费时间进行垃圾回收的;
2023-01-12 21:37:34
855
原创 01-JDK、JRE、JVM之间的区别?
JVM不能单独搞定class的执行,解释class的时候JVM需要调用JRE的类库lib。4.其他基础库,包括国际支持、输入/输出 (I/O)、扩展机制、Beans、Java 管理扩展 (JMX)、Java 本机接口 (JNI)、数学、网络、覆盖机制、安全性、序列化和Java XML 处理 (XML JAXP)。JDK(Java SE Development Kit),Java标准开发包,它提供了编译、运⾏Java程序所需的各种⼯具和资源,包括Java编译器、Java运⾏时环境,以及常⽤的Java类库等.
2023-01-12 16:57:12
757
原创 09-JAVA四种引用类型?
在JDK1.2版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strongly Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)4种,Java中4种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用 > 虚引用.
2023-01-10 21:13:54
221
原创 07-JVM 类加载机制?
1.JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化。2.一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization入、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称为连接(Linking)。这七个阶段的发生顺序所示。
2023-01-09 21:06:27
341
原创 05-安全点和安全域是什么?
而主动式中断的思想是当垃圾收集需要中断线程的时候,不直接对线程操作,仅仅简单地设置一个标志位,各个线程执行过程时会不停地主动去轮询这个标志,一旦发现中断标志为真时就自己在最近的安全点上主动中断挂起。抢先式中断不需要线程的执行代码主动去配合,在垃圾收集发生时,系统首先把所有用户线程全部中断,如果发现有用户线程中断的地方不在安全点上,就恢复这条线程执行,让它一会再重新中断,直到跑到安全点上。安全区域是指能够确保在某一段代码片段之中,引用关系不会发生变化,因此,在这个区域中任意地方开始垃圾收集都是安全的。
2023-01-06 17:55:55
430
原创 04-GC的常见收集方法:标记清除、标记复制、标记整理算法、分代收集的原理与特点?
每次只使用其中一块,当这一块内存满后将尚存活的对象复制到另一块上去,把已使用。老生代的特点是每次垃圾回收时只有少量对象需要被回收,新生代的特点是每次垃。分代收集法是目前大部分 JVM 所采用的方法,其核心思想是根据对象存活的不同生命周期将内存。理对象,而是将存活对象移向内存的一端, 然后直接清理掉端边界外的内存。圾回收时都有大量垃圾需要被回收,因此可以根据不同区域选择不同的算法。最基础的垃圾回收算法,分为两个阶段,标记和清除。2.清除阶段回收被标记的对象所占用的空间。1.标记阶段标记出所有需要回收的对象。
2023-01-06 16:22:29
437
原创 03-GC对象的两种判定方法(如何判断对象已死)?
为了解决引用计数法的循环引用问题,Java 使用了可达性分析的方法。通过一系列的“GC roots”对象作为起点搜索。如果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的。要注意的是,不可达对象不等价于可回收对象,不可达对象变为可回收对象至少要经过两次标记过程。两次标记后仍然是可回收对象,则将面临回收。指的是如果某个地方引用了这个对象就+1,如果失效了就-1,当为 0 就会回收, 但是 JVM 没有用这种方式,因为无法判定相互循环引用(A 引用 B,B 引用 A)的情况。
2023-01-06 11:53:42
164
原创 02-JVM堆里面的分区:Eden,survival (from+ to),老年代,各自的特点?
在过去自定义类加载器使用不普遍的时候,类几乎是“静态的” 并且很少被卸载和回收,因此类也可以被看成 “永久的”(这也就是永久代的含义),另外由于类作为JVM实现的一部分,它们不由程序来创建,所以为了和堆区分开来呢,就给了 “方法区” 这样一个名字用来存储类的信息。因此,默认情况下,元空间的大小仅受本地内存限制。在JDK 8之前,方法区的具体实现方法是永久代,永久代是HotSpot虚拟机给出的实现,但是对于其他虚拟机实现,譬如BEA JRockit、IBM J9等来说,是不存在永久代的概念的。
2022-12-31 21:14:36
2350
原创 01-JVM内存模型以及分区,需要详细到每个区放什么?
栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上面存储局部变量表,操作数栈,动态链接, 返回地址等信息,局部变量表存放的是八大基础类型加上一个应用类型,所以还是一个指向地址的指针。JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面,class 类信息常量池(static 常量和 static 变量)等放在方法区。存储初始化的对象,成员变量 (那种非 static 的变量),所有的对象实例和数组都要在堆上分配。主要存储Native 方法服务。记录当前线程执行的行号。
2022-12-30 10:51:42
432
原创 36-SpringBoot 整合SpringSession实现跨服务共享session
对于session无法跨服务, 跨域名使用的问题, 我们可以使用SpringSession将session保存在中间件中(比如redis), 从而实现了session的共享.浏览器cookie保存一个session的key, 如图就是叫jsessionid, 这个key就对应着redis中的session, 用来标识一个用户。
2022-10-07 16:17:37
689
原创 35-SpringBoot 短信验证码接口使用
我选择第一个进入,然后购买。我们要修改的参数就以下几个。使用postman测试。code:你的验证码。
2022-09-29 16:21:03
1722
原创 Java线程池-异步任务编排
FutureTask可以拿到返回结果,可以处理异常futureTask.get()阻塞等待整个线程执行完成,获取返回结果线程池工作流程图corePoolSize(必需):核心线程数。默认情况下,核心线程会一直存活,但是当将allowCoreThreadTimeout 设置为 true 时,核心线程也会超时回收。maximumPoolSize(必需):线程池所能容纳的最大线程数。当活跃线程数达到该数值后,后续的新任务将会阻塞。keepAliveTime(必需):线程闲置超时时长。如果超过该时长,非核
2022-08-15 22:08:24
1480
原创 18-GuliMall 压力测试与性能监控
Jdk 的两个小工具 jconsole、jvisualvm(推荐用它, 是升级版的 jconsole);通过命令行启动,可监控本地和 远程应用。解压运行 jmeter.bat 即可。点击对应链接, 复制如下图中的url。我的java版本是1.8.0_45。下载图中蓝色选中区域对应的压缩包。windows的命令行中输入命令。1.启动jvisualvm。2.安装插件方便查看 gc。这样就可以正常安装插件了。......
2022-08-09 16:49:02
234
原创 17-GuliMall 搭建虚拟域名访问环境
ip地址不唯一, 但是一定是要从虚拟机内部可以访问到windows的地址, 这个地址可以是电脑连接wifi后获得的ip地址, 这里我使用的是电脑分配给VirtualBox的ip地址.将conf.d文件夹中的default.conf文件复制一份,命名为gulimall.conf。按照下图添加内容, 配置上游服务器, 也就是我们的gateway网关模块的地址。在文件末尾添加域名映射, ip是你的nginx的地址。2.修改挂载目录下的nginx.conf文件。启动我们的网关服务模块, 商品服务模块。......
2022-08-09 13:13:51
856
原创 16-GuliMall ElasticSearch安装分词器
修改ik分词器的配置文件 IKAnalyzer.cfg.xml, 文件可以通过挂载目录修改 < properties > < comment > IK Analyzer 扩展配置 < entry key = " ext_dict " >
2022-08-03 14:30:26
885
原创 15-GuliMall ElasticSearch复杂检索
在Elasticsearch中,您有执行搜索返回hits(命中结果),并且同时返回聚合结果,把一个响应中的所有hits(命中结果)分隔开的能力。这是非常强大且有效的,您可以执行查询和多个聚合,并且在一次使用中得到各自的(任何一个的)返回结果,使用一次简洁和简化的API来避免网络往返。该查询语言非常全面,并且刚开始的时候感觉有点复杂,真正学好它的方法是从一些基础的示例开始的。2.should应该达到should列举的条件,如果达到会增加相关文档的评分,并不会改变查询的结果。...
2022-08-02 16:00:15
268
原创 14-GuliMall ElasticSearch安装与入门
全文搜索属于最常见的需求,开源的Elasticsearch是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、StackOverflow、Github都采用它.Elastic的底层是开源库Lucene。但是,你没法直接用Lucene,必须自己写代码去调用它的接口。Elastic是Lucene的封装,提供了RESTAPI的操作接口,开箱即用。httpshttpshttpshttp。............
2022-07-31 14:20:22
518
原创 13-GuliMall 基础篇总结
spu指的是一个模糊的商品,比如iPhone13,并没有确定它的颜色,内存等可选属性。sku指的是一个具体的销售商品,比如iPhone13红色256G版。每个服务的最大占用运行内存是可以修改的。下面以京东商城为例来解释各个表。.........
2022-07-29 18:29:53
617
原创 12-GuliMall 后台管理中商品系统的品牌管理
这节用到了JSR303数据校验和阿里云的OSS对象存储, 详情请看博客JSR303数据校验OSS对象存储我们在gulimall父工程下新建一个第三方服务模块gulimall-thirdparty, 这里写我们的OSS对象存储服务、短信服务等.对象存储服务是用来存储我们的图片的使用Spring Initializer创建工程pom.xml记得在gulimall-gateway网关配置文件加上我们的路由路径3.公共模块在公共模块gulimall-common里加入我们的数据校验分组接口, 自定义
2022-07-24 16:45:13
649
原创 33-SpringBoot JSR303数据校验
校验注解我们也可以自定义,使用我们自己的校验规则自定义校验注解@ListValue//初始化方法@Overridepublicvoidinitialize(ListValueconstraintAnnotation){vals){}}//判断是否校验成功/****@paramvalue需要校验的值*@return}}Stringmessage()default"必须提交指定的值";测试类运行测试。...
2022-07-23 23:04:34
404
原创 32-SpringBoot 集成阿里云对象存储OSS
这种方式不需要我们的服务器中转文件,我们的服务器只分发签名,前端拿着签名直接就将文件上传至阿里云,效率更高.这种上传方式需要先将文件上传到我们的服务器,然后通过我们的服务器中转再上传到阿里云OSS。访问http//localhost9080/oss/getPolicy。开启对象存储服务后(按流量计费),进入对象存储控制台。现在使用postman模拟前端使用签名上传文件。运行测试(我的项目整合了swagger2)返回的url也就是图片的访问地址。创建AccessKey。......
2022-07-23 18:56:03
857
原创 11-GuliMall 后台管理中商品系统的分类维护
我们.整合devtools实现热启动和swagger2接口文档, 提高开发效率SpringBoot devtools热启动SpringBoot 集成Swagger2在公共模块gulimall-common中的pom.xml中导入依赖2.swagger2在公共模块gulimall-common中的pom.xml中导入依赖在公共模块gulimall-common中编写配置类微服务模块的启动类上加入包扫描controller加入Swagger2的相关注解定义在类上:@Api定义在方法上:@Api
2022-07-21 16:38:50
649
原创 10-GuliMall vue/cli脚手架安装使用
运行流程进入页面首先加载index.html和main.js文件。main.js导入了一些模块【vue、app、router】,并且创建vue实例,关联index.html页面的元素。使用了router,导入了App组件。并且使用标签引用了这个组件第一次默认显示App组件。App组件有个图片和,所以显示了图片。但是由于代表路由的视图,默认是访问/#/路径(router路径默认使用HASH模式)。...
2022-07-18 20:23:47
199
原创 09-GuliMall Vue上手
往往不同的页面,也会有相同的部分。所以我们会把页面的不同部分拆分成独立的组件,然后在不同页面就可以共享这些组件,避免重复开发。每个Vue实例在被创建时都要经过一系列的初始化过程创建实例,装载模板,渲染模板等等。每当Vue实例处于不同的生命周期时,对应的函数就会被触发调用。vscode本身没有新建项目的选项,所以要先创建一个空的文件夹。//1.定义全局组件,两个参数1,组件名称。...
2022-07-18 13:31:26
150
原创 08-GuliMall SpringCloud Gateway作为网关
测试localhost9000?url=baidu跳到百度页面。测试localhost9000?url=qq跳到qq页面。
2022-07-16 20:03:00
210
凯斯西储大学(CWRU)滚动轴承数据
2022-04-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人