- 博客(18)
- 收藏
- 关注
原创 Redis 还是 MySQL?如何选择合适的数据库
此时可以采用 Redis 作为缓存,先把常用数据缓存在 Redis 中,等需要时再从 Redis 快速获取,大大提高查询效率,减轻 MySQL 的负担。Redis 作为内存数据库,利用内存的高速读写特性来提供快速的数据访问,非常适合作为缓存。总的来说,Redis 作为内存数据库,查询速度非常快,非常适合作为缓存来缓解 MySQL 的压力。MySQL 在执行查询时,会利用索引来快速定位数据。相比之下,Redis 的查询是直接通过 key 来获取数据,不需要像 MySQL 那样遍历索引文件,所以查询速度更快。
2024-07-19 14:25:46
600
原创 Mysql建表规范
这个表满足第一范式,但存在部分依赖问题。因为学生 ID 和课程 ID 联合构成了主键,但成绩只依赖于这个联合主键的一部分 - 课程 ID。通过以上示例,我们可以看到,随着范式的提高,表结构越来越细化,但数据冗余度也越来越低,满足了数据库设计的规范性和效率。因为专业名称依赖于专业 ID,而专业 ID 又依赖于学生 ID。假设我们有一个学生表,包含学生 ID、姓名、专业 ID、专业名称。假设我们有一个学生表,包含学生 ID、姓名、地址、电话号码。假设我们有一个学生课程表,包含学生 ID、课程 ID、成绩。
2024-07-17 14:33:48
440
原创 校园活动推送平台原型设计
搜集到的活动信息会经过整合和优化,以清晰、易读的方式展示给学生们,方便他们快速了解活动详情。(2)后端接口:前端通过API接口向后端请求活动列表数据,后端根据筛选条件查询活动信息表,并返回结果给前端。(2)后端接口:前端通过API接口向后端请求活动详情数据,后端根据活动ID查询活动信息表,并返回结果给前端。(2)后端验证:后端接收前端传递的用户信息,验证用户名和密码的正确性,并生成用户会话信息。(1)前端页面:当用户点击某个活动时,跳转到活动详情页面,展示活动的详细描述、图片等信息。
2024-07-17 11:12:52
805
原创 大数排序算法及其应用
分布式排序算法:对于海量数据,可以采用分布式计算的方式进行排序。外部排序算法:当数据量太大,无法一次性加载到内存中时,可以使用外部排序算法。外部排序的基本思路是将数据分块读入内存进行局部排序,然后合并这些有序块。比特排序算法:对于整数数据,可以利用位操作进行排序。比特排序算法的核心思想是将数据分解为比特位,然后按照比特位的顺序进行排序。它将数据分块读入内存,对每个块进行局部排序,然后合并有序块。它的核心思想是将数据分解为比特位,然后按照比特位的顺序进行排序。这种方法特别适合处理大范围整数数据,效率很高。
2024-07-17 11:08:46
733
原创 软引用和弱引用在Java中的应用
由于WeakHashMap的key使用的是WeakReference,当key所指向的对象被垃圾回收时,对应的键值对会自动从Map中删除,从而实现了自动的缓存淘汰。软引用(SoftReference)和弱引用(WeakReference)是Java中引用类型的两种特殊形式,它们在内存管理和缓存实现方面发挥着重要作用。:软引用在内存不足时才会被回收,弱引用在下一次垃圾回收时就会被回收。如果需要更快的回收,可以选择弱引用。:软引用的访问性能略高于弱引用,因为软引用在内存不足时才会被回收。
2024-07-17 10:34:02
317
原创 通俗理解银行家算法
比如,一个操作系统有3个CPU、2个内存单元,有A、B、C三个进程,每个进程分别需要的最大资源量是(2,3,2)、(1,1,2)、(1,2,2)。: 银行会检查,如果满足了所有客户(进程)的最大需求,则认为是安全的,可以分配资源。通过这样的资源申请、安全性检查和资源分配机制,银行家算法能够避免死锁的发生,确保系统的资源分配是安全和有序的。: 每个客户(进程)都会向银行(操作系统)申请所需的资源数量,银行会根据当前的可用资源进行评估。: 就是银行本身,它掌握着所有可用的资源,需要根据客户的需求进行合理分配。
2024-07-17 10:22:00
320
原创 JVM自动内存管理
使用句柄的最大好处就是 reference 中存储的是稳定的句柄地址,即使对象被移动(垃圾收集时移动对象)时,也不会影响访问的定位。通过合理划分内存区域、采用高效的垃圾回收算法,JVM能够有效管理和利用有限的内存资源,大大提高了Java程序的性能和可靠性。程序计数器(Program Counter Register): 是线程私有的,每个线程都有一个程序计数器,用于记录正在执行的虚拟机字节码指令的地址。值得注意的是,在JDK 8及之后的版本中,方法区被移除,取而代之的是元空间(Metaspace)。
2024-07-15 10:22:28
728
原创 Java反射机制全面解析
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取信息以及动态调用对象的方法的功能称为Java语言的反射机制。
2024-07-14 16:56:06
618
原创 注解工作原理及常用注解
定义注解: 使用@interface关键字定义一个新的注解类型。添加元注解: 可以在定义的注解上添加元注解,如@Target@Retention等,指定注解的作用域和生命周期。添加属性: 在注解定义中添加属性,以描述注解的信息。属性可以有默认值。使用注解: 在代码中使用自定义的注解,对其属性进行赋值。当属性名为value时,可以省略属性名。解析注解: 通过反射 API 读取并解析代码中的注解信息,在运行时执行相关逻辑。// 自定义注解示例// 使用注解// ...
2024-07-14 16:17:53
442
原创 快速上手冒泡排序、快速排序、堆排序
快速排序是一种分治算法,通过选择一个基准元素(pivot),将数组分为两个子数组,左子数组的元素都小于基准元素,右子数组的元素都大于基准元素。这种算法效率较高,是常用的排序算法之一。冒泡排序的核心思想是,每次遍历数组时,将最大的元素"冒"到数组末尾。通过两层循环实现,外层循环控制遍历次数,内层循环负责交换相邻元素。堆排序利用了二叉堆的性质,首先构建一个大顶堆,然后将堆顶元素(即最大元素)与数组末尾元素交换,并重新调整堆,直到排序完成。这种算法的时间复杂度较好,适合处理大规模数据。
2024-07-10 19:56:49
215
原创 事务漫话整理
是数据库提供的一个特性,是组成各个数据的执行的单元,人话就是“干了这件事,数据发生变化”。不可重复读:一个事务读取到了另一个事务提交的数据,导致了多次查询的结果不一致。幻读:一个事务读取到了另一个事务提交的数据,导致了多次查询的结果不一致。事务的隔离级别(设置数据库的隔离级别,根据级别的不同,解决上述的读的问题)提供事务(事务已经结束了,数据永久的保存到数据库中了)回滚事务(事务已经结束了,数据回滚到最初始化的状态)强调的是事务一旦结束了,数据将永久的保存到数据库中。窗口中把事物提交了: commit;
2024-07-10 19:47:41
255
原创 小白也能读懂的:为什么项目开发最好没有中文路径?
如果你的项目已经用了中文路径,并且遇到了问题,那就考虑把项目挪到一个没有中文的路径下,然后更新你的构建脚本、IDE设置和项目配置,这样可能就解决问题啦~虽然现在的电脑系统都能看懂好多语言的字,但在编程的时候,路径里的字可能会跟你的代码文件、构建脚本或者IDE的某些部分“说话”对不上,导致一些奇怪的错误,比如找不到文件、编译不通过或者程序跑起来不对。虽然现在的新工具大多能处理各种语言的字,但总有些老的工具或库不太擅长这个,万一你的项目里用了这些老东西,就可能会因为路径里有中文而出问题。
2024-07-09 14:39:40
383
原创 理解Java包装器中的128陷阱
128陷阱是Java开发中容易遇到的一个问题,特别是在处理Integer对象的比较时。理解整数缓存机制和正确使用equals()方法是避免这个陷阱的关键。通过明确比较意图和警惕自动装箱的行为,可以有效地避免在编程中陷入这个陷阱。
2024-07-08 13:31:41
696
1
原创 Java并发编程知识点总结
在执行任务时,如果遇到异常会直接抛出,而submit方法不会直接抛出,只有在使用Future的get方法获取返回值时,才会抛出异常。5)RejectedExecutionHandler(饱和策略):当队列和线程池都满了,说明线程池处于饱和状态,那么必须采取一种策略处理提交的新任务。非公平锁:多个线程去获取锁的时候,会直接去尝试获取,获取不到,再去进入等待队列,如果能获取到,就直接获取到锁。公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才 能得到锁。
2024-07-08 10:32:33
364
原创 计算机网络实验(一)——抓包
1.win+R打开运行窗口,输入cmd进入命令提示符,输入指令ipconfig查看自己的IP(IPv4地址)2.输入过滤器指令arp&ð.addr==7c-57-58-42-e1-14,可以看到发送的arp包。
2024-04-10 09:20:34
728
1
原创 mysql5.6更新8.3遇到问题及解决方案总结
出现该问题的原因总结就是“没删干净”:卸载旧版本mysql不仅仅需要删除文件夹“mysql-connector-j-x.x.xx”本身,还需要在“服务”中找到并停止旧版本的mysql服务。之所以绕这么大一个弯子,是因为虽然表面上这是卸载重装后遇到的第一个问题,事实上重装后此时mysql仍未必可以正常启动——毕竟可以正常启动的时候也遇不到一系列问题——将上述遇到的问题依次解决,mysql可以正常启动后,最后一个问题自然也就迎刃而解。问题出现原因,“无权限”,启动命令提示符时选择“以管理员身份运行”即可解决。
2024-04-04 11:23:02
1505
1
原创 SpringMVC边角料整理
通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。首先,RESTful 风格的 URL 是基于资源的,使用统一的资源标识符(Uniform Resource Identifier)来标识资源。通过将 URL 中的变量部分绑定到控制器方法参数上,我们可以方便地获取资源标识符的值,并根据这些值执行相应的操作。Spring MVC会根据这个名称来查找对应的视图模板,并将处理后的数据填充到模板中,生成最终的HTML页面。
2024-03-31 17:26:52
1299
1
原创 认识 java不同方法
类映射的实际事物称为对象,而方法,常常充当被调用,以实现对象某种功能的角色。构造方法:Java构造方法是类的一种特殊方法,用来初始化类的一个新的对象,在创建对象(new 运算符)之后自动调用。了解了不同方法的定义,我们可以从宏观的角度区分以上方法。先要明确,方法本身的功能就是调用以实现某种功能,不同的方法自然调用方式不同。成员方法:成员方法描述对象所具有的功能或操作,反映对象的行为,是具有某种相对独立功能的程序模块。静态方法:Java静态方法是被static修饰的成员方法,它属于类,而不是类的实例。
2023-08-13 09:56:10
106
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人