- 博客(57)
- 收藏
- 关注
原创 Photoshop(PS)——人像磨皮
2.利用Ctrl+J 复制两个图层出来,选择第一个拷贝图层,选择滤镜---杂色---蒙尘与划痕。7.然后把两个图层按住shift键同时选中,再按 Ctrl+G 建成一个组。4.然后选择拷贝2图层,选择滤镜---其它---高反差保留。1.新建一个文件,背景为白色,将图片素材放入文件中。3.调整一下数值,大概能够模糊痘印痘坑,点击确定。9.然后打开白色画笔,就可以在原图片上进行磨皮。5.选择2像素,出现一点纹理即可。6.确定之后,把图层模式改为强光。8.按住alt键和添加蒙版。
2024-11-15 12:11:12
790
原创 Excel-查找和引用数据-VLOOKUP 和 HLOOKUP 函数
在 Excel 中,VLOOKUP和HLOOKUP是用于查找和引用数据的函数。
2024-10-07 10:43:49
1071
原创 什么是DDos攻击?
DDoS攻击(分布式拒绝服务攻击)是一种网络攻击方式,攻击者通过大量的计算机或设备(通常是被感染的“僵尸网络”)同时向目标服务器发送请求,导致该服务器过载,从而无法正常处理合法用户的请求。这种攻击旨在使目标服务瘫痪,影响其可用性。DDoS攻击可以通过多种方式实施,包括洪水攻击、协议攻击等,常用于针对网站、在线服务或网络基础设施。
2024-09-29 23:43:54
592
原创 什么是SQL注入?
SQL注入是一种安全漏洞,攻击者通过在应用程序的输入字段中插入恶意SQL代码,从而操控数据库。此类攻击通常利用应用程序未对用户输入进行适当验证和清理的弱点。
2024-09-28 22:44:07
342
原创 计算机网络2
流量控制是网络通信中一种机制,旨在确保发送方不会以超过接收方处理能力的速度发送数据,从而避免数据丢失和网络拥塞。它主要通过调整数据传输速率来实现。
2024-09-27 23:26:08
647
原创 计算机网络1
HTTP(超文本传输协议)是一个无状态的应用层协议,而HTTPS(HTTP Secure)是HTTP的安全版本,它通过SSL/TLS协议提供加密和安全传输。:HTTP通常使用80端口,而HTTPS使用443端口。的,容易被窃听和篡改;HTTPS则对数据进行。,确保数据在传输过程中的安全性。:HTTP传输的数据是。
2024-09-26 23:24:21
439
原创 操作系统知识4
物理地址物理地址是指计算机内存中的实际地址,是硬件能够直接访问的内存地址。物理地址由内存管理单元(MMU)生成,指向具体的物理内存单元。逻辑地址逻辑地址也称为虚拟地址,是程序在运行过程中生成的地址,是程序员和操作系统认为的内存地址。逻辑地址通过内存管理单元映射到物理地址,允许程序使用比实际物理内存更大的地址空间。虚拟内存虚拟内存是一种内存管理技术,它使得操作系统可以使用硬盘作为扩展内存,使得程序能够运行时看似拥有更多内存空间。
2024-09-25 22:49:57
719
原创 操作系统知识3
孤儿进程是指那些父进程已经终止,但子进程仍然在运行的进程。操作系统会将这些孤儿进程的父进程ID(PID)设置为1,即系统的init进程(在现代系统中通常是systemd或类似的进程),以便这些进程能被正确管理和清理。
2024-09-24 22:16:48
345
原创 操作系统知识1
用户态是指普通应用程序运行的环境。在这个状态下,程序不能直接访问硬件资源或内核数据结构。所有对硬件资源的访问必须通过系统调用,借助操作系统的服务进行。用户态的运行速度较快,且相对安全,因为它受限于权限。内核态是操作系统核心部分的运行状态,具有对硬件资源的完全控制权限。内核可以执行敏感的任务,如访问硬件、管理内存和进程等。在内核态运行的代码通常是操作系统的一部分,能够直接与硬件交互。内存泄漏是指程序在动态分配内存后,没有及时释放这部分内存,导致这部分内存无法再被程序使用。
2024-09-22 23:42:32
402
原创 什么是僵尸进程?
当一个进程完成其任务后,它会向其父进程发送一个信号,通知其结束。如果父进程没有及时处理这个状态,子进程的信息就会保留在进程表中,形成僵尸进程。虽然僵尸进程不再执行任何代码,但它们仍占用系统资源的一部分,如进程标识符(PID)。这种状态通常发生在子进程结束后,父进程尚未读取其退出状态,导致子进程的信息仍保留在系统中。如果父进程因为某种原因没有处理子进程,可以通过重启父进程来清除僵尸进程。开发时,确保父进程能够及时处理子进程的状态,可以避免僵尸进程的产生。函数,来获取并处理子进程的退出状态,从而清除僵尸进程。
2024-09-21 23:38:18
315
原创 Java-锁粗化
锁粗化是一种优化技术,通过将多个细粒度的锁合并为一个较大范围的锁,减少锁的获取和释放次数。这种方法可以降低上下文切换的频率,从而提高并发程序的性能,减少锁竞争,改善线程间的协作效率。
2024-09-20 22:45:39
848
原创 避免死锁发生的策略
例如,若资源A的序号低于资源B,则进程只能先申请A,后申请B。如果计算机A正在打印文档1,同时请求打印文档2,系统可以限制其在等待文档2时不能持有文档1的资源。中,设定进程在请求资源时,如果在特定时间内未能获得,则自动释放已占用的资源。为每个资源设置最大持有时间,若进程在规定时间内未能完成操作,将强制释放所持资源。如果发现死锁,可以选择终止某些低优先级的进程,释放它们占用的资源,从而恢复系统的正常运行。中,客户在进行交易时,一次性申请所需的所有资源(如账户余额、贷款额度),避免多次请求引发死锁。
2024-09-19 22:58:24
312
原创 如何让一个正在执行的线程暂停?
根据具体需求选择适合的方式来暂停线程。请注意,尽量避免使用 Thread.stop() 方法,因为它会强制终止线程,可能导致不一致的状态。在对象上调用 wait() 方法可以让当前线程等待,直到其他线程调用 notify() 或 notifyAll()。例如,使用一个 volatile 变量来指示线程是否应该继续执行。可以使用 CountDownLatch 、 Semaphore 等工具来控制线程的暂停和继续。这个方法可以让当前线程暂停指定的毫秒数。
2024-09-18 23:15:18
746
原创 Java多线程3
守护线程是指那些在后台运行的线程,它们的存在是为了支持程序的其他线程。与普通线程不同的是,守护线程在所有非守护线程终止时会自动结束,不会阻止JVM的退出。使用多线程可以提高程序的效率,利用多核处理器的能力,同时使得程序能够在执行I/O操作时继续处理其他任务,从而提升响应速度和整体性能。有序性在并发编程中指的是在多线程环境下,程序的执行顺序应与单线程情况下保持一致,以避免出现不确定或错误的执行结果。
2024-09-17 23:09:48
617
原创 Java多线程2
在多线程程序中,线程通常会在各自的工作内存(缓存)中保存变量的副本。如果一个线程修改了这些变量,其他线程可能不会立刻看到这些修改,因为它们可能仍然在使用旧的副本。变量,确保变量在构造函数中初始化后不可修改,这意味着一旦构造函数完成,其他线程对这个变量的读取总是能看到正确的值(因为。),可以保证在临界区内对共享变量的操作是原子的,并且在进入或退出同步块时,线程会同步到主内存,从而保证可见性。等待子线程完成,这样可以确保主线程看到子线程对共享变量的修改。变量,如果多个线程对变量进行读写操作,依然需要使用。
2024-09-16 23:54:16
541
原创 Java多线程1
原子性指的是某个操作在执行过程中不可被中断,它要么完全执行,要么完全不执行。原子性确保了操作的完整性和一致性,尤其在并发环境下尤为重要。示例简单的例子:整数变量的加法操作(i++)在某些环境下可能不是原子操作。如果两个线程同时对同一个变量进行加法操作,可能会导致数据竞态问题。为了保证操作的原子性,可以使用锁机制来保护这段操作。复杂的例子:在数据库系统中,一个转账操作(从账户A转账到账户B)需要保持原子性,要么全部成功(扣款和存款都完成),要么全部失败(不进行任何变更)。
2024-09-15 22:35:27
1139
原创 JavaScript知识点3
JSON.stringify 函数将一个JavaScript对象或值转换成一个JSON格式的字符串。// 输出: '{"name":"Alice","age":25}'这使得对象可以被存储或传输,并且易于解析。
2024-09-14 21:55:59
555
原创 JavaScript知识点2
在JavaScript中,无阻塞加载的目的是确保页面在加载时不会因为脚本执行而变得卡顿或不响应。脚本会在后台下载并在下载完成后执行,不会阻塞页面的渲染。属性来延迟脚本的执行,直到页面的DOM完全加载完成。脚本的下载和执行不会阻塞页面的解析。这些方法各有优劣,选择合适的去重方式取决于具体的使用场景和性能要求。这种方式可以在需要时加载脚本,而不会阻塞页面的初始渲染。的脚本会按它们在文档中出现的顺序依次执行。属性只适用于外部脚本,不适用于内联脚本。对象的键值唯一特性进行去重。配合使用,实现更灵活的模块加载。
2024-09-13 22:34:42
901
原创 JavaScript知识点1
同源策略(Same-Origin Policy)是浏览器用于隔离不同源的网页以增强安全性的机制。它要求来自不同源的网页不能相互访问彼此的资源。// 结果是 NaN。(Not-a-Number)是一个特殊的值,表示某个值不是一个合法的数字。: 用于从数组中提取一个片段,返回一个新的数组,不改变原数组。// 结果是 NaN。是 JavaScript 中的一个全局属性,其类型是。: 用于从数组中添加或删除元素,改变原数组。,但其值不是一个有效的数字。用于数组(添加或删除元素)。用于数组(返回片段),
2024-09-12 22:53:17
1071
原创 Vue面试题3
Vue采用了树的对比算法,但与React的算法有所不同。Vue的diff算法主要通过对比树的不同层级来优化性能,而不是每个节点都对比。每次组件更新时,Vue会生成一个新的虚拟DOM树,然后通过对比新旧虚拟DOM树,找出差异。:Vue在组件的更新过程中,首先比较组件的虚拟DOM树,再对比具体的节点,以确定哪些节点需要更新或删除。Vue的Diff算法主要用于优化虚拟DOM的更新过程,确保页面的高效渲染。:使用一个中央事件总线来实现兄弟组件间的通信,但这种方法可能会使得状态管理变得复杂和不易维护。
2024-09-10 23:52:15
817
原创 Vue面试题2
属性来指定过渡效果的类名,并可以结合 CSS 动画或过渡来实现。Vue 会在元素进入和离开时自动添加和移除对应的过渡类名。将传入的混入对象合并到 Vue 实例的选项中。这些选项会被合并到每个组件的选项中,从而影响所有组件的行为。在实际使用中,可以通过编程方式添加、修改或删除路由配置,以适应不同的应用需求和场景。能够拦截对对象属性的访问、设置等操作,从而实现对数据变化的跟踪。是 Vue 提供的一个用于处理元素和组件进入和离开的过渡效果的工具。是用来全局混入功能的,它可以将混入对象的选项(如。
2024-09-09 22:23:48
700
原创 Vue面试题1
用于定义计算属性,依赖于 Vue 实例的数据属性。它们会基于其依赖的响应式数据进行缓存,只有当这些依赖的数据变化时,计算属性才会重新计算。计算属性会被缓存,直到其依赖的数据发生变化。适用于需要基于现有数据进行复杂计算或逻辑处理的场景,其值会被缓存,直到相关数据改变。是观察者,用于观察 Vue 实例的数据属性,并在这些属性发生变化时执行特定的回调函数。用于在数据变化时执行异步操作或复杂逻辑,适合用于监控特定数据的变化并触发副作用。对数据对象的属性进行劫持,实现数据变化时自动通知观察者并触发视图更新。
2024-09-08 22:15:56
702
原创 如何使用Spring Boot进行单元测试
在IDE中,你可以右键点击测试类或方法并选择“Run”来运行测试。也可以在终端中运行所有测试,使用。: 查看测试输出,确认所有测试都通过。如果有失败的测试,查看错误信息并修复问题。它包括JUnit、AssertJ、Hamcrest等测试框架。目录下创建一个测试类。确保该类位于与待测试类相同的包或其子包中。你可以使用断言来验证方法的输出是否符合预期。这有助于隔离测试并避免调用真实的服务。: 如果你的测试类依赖于其他服务或组件,可以使用。
2024-09-06 23:11:48
423
原创 Spring Boot项目中集成JWT进行身份验证
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境中安全地传递信息。它主要用于在客户端和服务器之间传递经过签名的 JSON 数据,以确保数据的完整性和真实性。
2024-09-05 22:53:42
1663
原创 Springboot-文件的上传和下载
首先,创建一个Spring Boot项目并添加必要的依赖。可以使用Spring Initializr生成项目。启动你的Spring Boot应用。确保在项目根目录下创建一个。目录,或者根据需要调整。
2024-09-04 23:39:35
297
原创 Spring Boot-自定义banner
在 Spring Boot 应用中,你可以自定义启动时显示的 banner。默认情况下,Spring Boot 使用项目的 banner.txt 文件中的内容作为启动时的 banner。在你的 Spring Boot 主类中,你可以配置应用以使用自定义 Banner。如果你需要更高级的自定义,例如动态生成 banner 或从外部源加载,可以通过编写一个。实现 org.springframework.boot.Banner 接口,并。的文件,并在其中放入自定义的 ASCII 艺术或文本。
2024-09-03 23:13:17
1206
原创 Vue-生命周期钩子
Vue.js 的生命周期钩子是指在 Vue 实例的不同阶段会被调用的一组函数。这些钩子函数允许你在特定的生命周期阶段执行自定义的代码。
2024-09-02 23:12:23
521
原创 JavaScript-document.write和innerHTML的区别
document.write() 和 innerHTML 都是在JavaScript中用于修改HTML文档的方法,都用于在页面上插入内容,但它们的工作方式和用途有所不同。在现代开发中,推荐使用 innerHTML 进行动态更新,因为它更安全且不会破坏整个页面。这会找到ID为“myElement”的元素,并将其内容替换为元素。适合在页面加载时动态插入内容,不适合用于现代网页的动态更新。用于获取或替换HTML元素的内容,可以在页面加载后动态更新。用于直接将内容写入页面的 HTML 中。
2024-08-31 21:26:20
403
原创 JavaScript-防抖和节流
适用场景:滚动加载,时间间隔内只加载一次,模拟鼠标移动(mousemove),监听滚动事件(比如是否滑到底部自动加载更多,用throttle是为了降低频率)。:如果一个函数持续地触发,那么只在它停止触发的一段时间后才执行,如果在这段时间内又开始持续触发,则重新计算时间。适用场景:文本输入的验证(连续输入文字后发送Ajax请求进行验证,验证一次就好)。:如果一个函数持续地触发,那么固定在一段时间内只执行一次。
2024-08-31 21:00:37
698
1
原创 HTML和HTML5有什么区别
HTML,即超文本标记语言,是构建网页的标准语言。最初版本的HTML简单地定义了网页的结构和内容,包括文本、图片、链接等元素。HTML的基本标签包括等,它们帮助浏览器正确渲染网页内容。HTML5是HTML的第五个主要版本,旨在解决Web开发中的一些长期存在的问题,并引入了许多新功能。HTML5不仅扩展了现有功能,还增强了对多媒体、图形和应用程序的支持。
2024-08-30 22:48:08
2766
原创 CSS3新特性
渐变背景(支持线性渐变linear-gradient和径向渐变radial-gradient)、圆角边框(border-radius)、阴影(box-shadow 和 text-shadow)。:CSS3引入了许多新的选择器,例如属性选择器、结构伪类选择器、否定伪类选择器等,开发者能够更精准地选中需要的元素,如 :nth-child() 和 :not()。:响应式设计的基础(@media),使得开发者能够根据设备的特性(例如屏幕宽度、设备类型等)来应用不同的样式。:自定义字体(@font-face)。
2024-08-29 22:55:02
334
原创 JVM(Java虚拟机)
JVM(Java Virtual Machine)是Java虚拟机的简称,它是运行所有Java程序的抽象计算机。此外,JVM还负责内存管理和垃圾回收,它会自动管理对象的生命周期,当一个对象不再被引用时,JVM会自动回收其占用的内存,这极大地简化了程序员的工作。负责自动管理和回收JVM中的内存资源,当对象不再被引用时,垃圾回收器会自动回收其占用的内存,以释放内存,减少内存泄漏和优化性能。Java的“一次编写,处处运行”主要得益于Java的设计理念和Java虚拟机(JVM)的存在。负责解释和执行字节码。
2024-08-28 23:03:53
993
原创 MVC模式与MVVM模式
MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)是两种常见的软件架构模式,用于分离应用程序的不同部分,以提高可维护性和可扩展性。
2024-08-27 22:37:49
347
原创 Java-并发
在多核处理器环境中,如何高效地利用计算资源是提升应用性能的关键。并发编程不仅能够提高程序的响应速度,还能增强其吞吐量和处理能力。线程的生命周期包括创建、就绪、运行、阻塞和死亡状态。管理线程的状态和协调线程的执行对开发并发程序至关重要。Condition类提供了更丰富的线程间通信机制,替代 wait() 和 notify()。Executor框架提供了高效管理和复用线程的机制,减少线程创建和销毁的开销。避免死锁的策略包括锁的顺序一致、锁超时和使用更高级的并发工具。使用线程池:管理线程的创建和销毁。
2024-08-26 22:10:35
327
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人