- 博客(51)
- 资源 (10)
- 问答 (1)
- 收藏
- 关注
原创 像素鸟 app 的设计与实现
在飞速发展的互联网时代,快捷生活的学生可以在碎片化的时间里使用像素鸟进行娱乐放松。Android studio SQLite 音乐播放 小游戏
2021-06-29 18:03:13 937 3
原创 数据库学生信息管理系统
本数据库管理系统基于学生表进行数据的存储和读取,首先由一个登陆界面,输入正确的学生的学号和密码才能进入系统,如果学生登陆成功,曾通过菜单命令显示所有学生信息、添加学生、插入学生、删除学生、根据姓名查询学生信息,查看学生平均成绩和成绩统计分析等。
2020-06-16 14:03:51 9957 4
原创 使用ReentrantLock和ThreadPoolExecutor模拟抢课
为了简化示例,这里使用了 ReentrantLock来控制对 availableSeats 的访问,保证了线程安全。在实际应用中,可能需要更复杂的并发控制机制。在真实的抢课系统中,抢课的逻辑会更加复杂,需要考虑数据库的并发访问、事务处理、网络延迟等因素。这里主要是在场景下帮助理解ReentrantLock和线程池的使用。
2024-06-18 22:45:18 359
原创 ReentrantLock可重入锁
在并发量较⼩的多线程应⽤程序中,ReentrantLock与synchronized性能相差⽆⼏,但在⾼ 并发量的条件下,synchronized性能会迅速下降⼏⼗倍,⽽ReentrantLock的性能却能依然维持⼀个⽔ 准。ReentantLock继承接⼝Lock并实现了接⼝中定义的⽅法,除了能完成synchronized所能完成的所有⼯作 外,还提供了诸如可响应中断锁、可轮询锁请求、定时锁等避免多线程死锁的⽅法。可重⼊锁,这个锁可以被线程多次重复进⼊进⾏获取操作。
2024-06-18 21:09:30 125
原创 一文了解IO流
文件读写:这是IO流最常见的用途之一。例如,FileInputStream和FileOutputStream用于处理文件的二进制数据,而FileReader和FileWriter则用于处理字符数据。IO流根据处理数据的类型可以分为字节流(以InputStream和OutputStream为基础)和字符流(以Reader和Writer为基础)。管道通信:Java IO提供了管道相关的流(PipedInputStream和PipedOutputStream),允许在不同线程之间进行数据传输,实现线程间的通信。
2024-06-16 16:21:04 702 3
原创 力扣93 复原地址
算法:递归判断每次选择的数字符不符合要求,一共只能选择4次,字符串必须正好用完。建议参考官方题解,递归函数中参数不应该这么复杂。数据结构:数组+字符串+递归栈。
2024-06-14 16:28:50 109
原创 观察者设计模型【代码详解】
NewsAgency是一个具体的主题,它通知所有注册的观察者(如NewsChannel)状态改变(新闻更新)的消息。Pattern)是一种行为设计模式,它定义了对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。当主题对象的状态发生变化时,主题对象会遍历注册到它上面的所有观察者,并调用观察者的更新方法,以通知所有观察者状态已经改变。观察者在得到状态更新的通知后,可以相应地更新自己的状态或执行相应的操作。观察者模式的主要角色。观察者模式的工作原理。
2024-06-14 09:45:00 462
原创 代码详解工厂设计模式【2】
这样,如果未来需要添加更多类型的文档处理,我们只需添加相应的具体产品和工厂类,无需修改现有代码,从而达到了开闭原则的要求。暴露了简单工厂模式的一些局限性。在工厂方法模式中,我们为每种产品提供一个工厂类,这样就避免了在一个工厂类中集中所有产品的创建逻辑,同时也使得新增产品时不需要修改已有的工厂类,只需要添加新的具体工厂类即可。工厂方法模式通过这种方式,将对象的创建逻辑分散到了各个具体工厂类中,每个具体工厂类负责创建一种具体产品,这样就避免了简单工厂模式中的问题,提高了系统的扩展性和可维护性。
2024-06-13 19:29:34 582
原创 代码理解工厂模式【1】
在这个例子中,DocumentFactory是一个简单工厂,它根据传入的字符串参数决定创建哪种类型的文档对象。⼯⼚类集合了所有产品的创建逻辑,职责过重,同时新增⼀个产品就需要在原⼯⼚类内部添加⼀个分⽀,违反了开闭原则。在创建对象时,不会对客户端暴露对象的创建逻辑,⽽是通过使⽤共同的接⼝来创建对象。如果现在又有新产品进来,实现完产品后还要到简单工厂加入对应的逻辑代码,如果有很多新产品,那么这样的处理是不是太麻烦?⼀般情况下,⼯⼚模式分为三种更加细分的类型:简单⼯⼚、⼯⼚⽅法和抽象⼯⼚。
2024-06-13 19:19:47 465
原创 力扣42 接雨水
算法:核心是计算这一列接到多少雨水,它取决于它左边的最大值和右边的最大值,如下图第三根柱子能接到的雨水应该是第一根柱子高度和第五根柱子高度的最小值减去第三根柱子高度。听说字节每人都会接雨水,我也要会哈哈哈。
2024-06-12 11:48:24 375
原创 力扣54 螺旋矩阵【如何优雅的写好代码】
这题本质是二维数组的遍历,更多考察的是对写代码的基本功。建议先写好伪代码这样才不会乱,特别是对边界条件的把握。
2024-06-07 10:57:57 135
原创 浅谈InoDB中的行级锁
Next-key lock本质上是一个组合锁,它结合了行锁(记录锁)和间隙锁(gap lock)。Next-key lock锁定的是一个前开后闭区间((a, b]),这意味着它锁定从a到b之间的间隙以及b这条记录本身,但不包括a。:这只是一个概念性的表示,为了加强理解方便记,而不是数据库锁的实际实现,因为next-key锁定是由数据库引擎本身管理的行为。Java不能直接控制数据库的锁定机制,而是依赖于数据库引擎的事务和并发控制。发⽣锁冲突的概率是最低的,并发度是最⾼的。每次操作锁住⼀⾏数据。
2024-06-06 16:19:57 202
原创 力扣236 二叉树的最近祖先
算法:二叉树的先序遍历,先判断根结点是不是空或者最近祖先,不是则递归遍历左子树,判断左子树是不是空或是最近祖先,再递归判断右子树是不是空或者最近祖先。留个眼,这题做了几次还是忘记,说明理解不深刻。
2024-06-05 20:56:08 103
原创 如何评价GPT-4o
首先,从模型容量上来看,GPT-4o相比其前身GPT-4,可能拥有更大的参数量,这意味着它能够更好地理解和生成更复杂的文本信息。GPT-4o的技术能力值得详细探讨。其次,在理解方面,GPT-4o对于复杂句子结构和隐含语义的把控更加准确,对上下文的维持和理解也更加深刻。此外,GPT-4o在处理多语言文本的能力上也有显著提升,支持更广泛的语言和方言,这使其在全球范围内的应用更加广泛。在理解和处理自然语言方面,GPT-4o也显示出了比GPT-4更加精准的语义捕捉能力,尤其是在理解上下文和长篇文本的连贯性方面。
2024-06-05 15:42:20 442
原创 力扣46 全排列 引发对JAVA对象引用的思考
这是因为C++在这种情境下执行的是对象的复制(copy),而不是引用(或指针)的复制。将vv添加到v中时,若是直接添加vv,实际上添加的是vv这个列表的引用,而不是它此刻的内容拷贝。因为在整个 DFS 过程中 vv 不断被修改,所以在 v 中的所有条目最终都会成为同一个列表的引用——而一旦递归完成,这个列表就会是空的。改成v.add(new ArrayList(vv))确保了存储在 v 中的每个排列在被添加到列表时都准确反映了当时的实际状态,而不是最后都指向同一个(最终为空的)列表 vv。
2024-06-05 15:28:38 400
原创 登录状态在页面跳转保存的三种方法
工作原理:在服务器验证用户的登录信息后,生成一个含有用户信息的Token(常使用JWT),发送给客户端。工作原理:当用户登录网站后,服务器发送一个或多个 Cookie 到客户端(浏览器),客户端会保存这些 Cookie,并在随后的每个请求中自动将它们发送回服务器,以便服务器识别用户。缺点:安全风险较高,容易受到跨站脚本攻击(XSS)影响,容量限制(每个 Cookie 大小限制在4KB左右),并且每次HTTP请求都会携带Cookie,增加了额外的网络负载。优点:实现简单,使用广泛。
2024-06-05 10:00:00 172
原创 面试经典题:创建三个线程,按顺序依次循环打印hello+i
二面被问到的手撕题,自己总计一下。考察的还是比较基础的,但也是对自己知识领悟程度的考察。这里设置为打印10轮。
2024-06-04 20:25:42 599 1
原创 力扣88 合并两个有序数组
这题本身不难,有趣的是第一个数组实际长度是合并后的数组长度,想优化空间复杂度的话需要从后向前比较。有一个较坑的点就是边界一定要注意加上判断,若第一个数组为空就踩坑了!自己没看清题目,以为m是数组总长度,结果是第一个数组的长度。
2024-06-04 16:57:53 81
原创 Java两种常见锁的实现
最明显的是,这个锁不是公平的,也就是说,等待获取锁的线程可能会遇到饥饿现象,尤其是在高负载的情况下。这个方法是原子的,即检查和设置值的操作是作为一个不可分割的整体执行的,因此可以安全使用在并发编程中。互斥锁:互斥锁是⼀种最常⻅的锁类型,⽤于实现互斥访问共享资源。这确保了同⼀时间只有⼀个线程能够访问被保护的资源。进入synchronized块时,线程会在lock对象上获得锁,退出时释放锁,从而确保count++的线程安全。⾃旋锁:⾃旋锁是⼀种基于忙等待的锁,即线程在尝试获取锁时会不断轮询,直到锁被释放。
2024-06-04 10:00:34 794 1
原创 力扣200 岛屿数量
算法:从0到所有,遍历过的要把标记上,第一次遍历且满足条件就是一个岛,从它出发利用广度优先遍历标记这个岛。易出错的点:注意是数字1还是字符1。数据结构:队列+数组。
2024-06-03 22:22:37 321
原创 关于找暑期实习后的一些反思
写在前面:距离研究生毕业还有9个月,前端时间一直在不停地投简历,不停地刷笔试题,不停地被拒绝,今天悬着的心终于死透了,心情还是比较糟糕的,可能唯一的安慰就是一篇小论文终于被会议接受了。行了进入正题,上面也就这段经历做一个简单总结,下面更多是为了应对未来的规划。希望在接下来的时间,摆正心态,好好学习,不要辜负自己的青春,也是为自己学生生涯画一个完美的句号。日期 2024年6月3日。
2024-06-03 22:18:29 1658 5
原创 B站秒杀项目学习心得
同时也遇到了很多bug,例如设置cookie时会出现同名cookie第一个值为null导致后端取不到数据;坚持自己实现一遍,看再多次也只是看,一定要写代码,你会发现就算有视频,有参考,还是会有很多bug,半天的项目视频,我前后花了4天才完全实现,这里还不能说全都明白。但是收获巨大,对很多只停留于脑海的知识点有更深的理解,如访问Redis确实比访问数据库快;在高并发场景下如何保证数据一致性(唯一性索引,乐观锁,原子性操作)等等。不能超卖在doSeckill1中通过update的排他性实现(乐观锁)。
2024-04-26 20:33:47 441
原创 draw.io导出矢量图到word报错text is not svg - cannot display
然后再word中粘贴,依旧是矢量图哦!如果不行,可能是转存的问题。
2023-08-15 20:48:52 1418 4
原创 pytorch+GPU跑模型时 nvrtc: error: failed to open nvrtc-builtins64_117.dll
如果版本高于11建议先降版本,然后再试下。
2023-07-31 20:42:27 3358 5
原创 记录这些天安装python框架遇到的大坑
ERROR: pyltp-0.2.1-cp36-cp36m-win_amd64.whl is not a supported wheel on this platform最终结果:pip install torch-1.0.0-cp36-cp36m-win_amd64.whl也会报同样错解决方法:查看自己python是64位还是32位,我犯的错是本机python是64位的,可Anaconda里面虚拟环境是32位的,卸载重装64位的anaconda再来,哭死》》...
2022-04-14 21:33:47 1026
原创 P1563 [NOIP2016 提高组] 玩具谜题
思路:将一圈想象成一个数组,逆时针下标从1开始增加,然后找数学规律,向内向左下标减少,向内向右下标增加。。。聪明人发现异或为1即增加下标注意:1.每次都要注意下标是否越界,因为是圆,要取模哦2.数组要开大,不然会报RE#include <bits/stdc++.h>using namespace std;int f[100001]={0},a[100001],s[100001];string j[100001];int main(){ int n,m,x=1; cin>
2022-02-22 11:18:12 495
原创 洛谷 P1161 开灯
题目[https://www.luogu.com.cn/problem/P1161?contestId=62094]题解:#include <bits/stdc++.h>using namespace std;int s[2000001]={0}; //这里定义放在main里面就错了int main(){ int n; double a[n+1]; int t[n+1]; for(int i=1;i<=n;i++) scanf("%lf%d",&a[i],
2022-02-14 23:48:12 584 1
原创 P5723 质数口袋
题目描述小 A 有一个质数口袋,里面可以装各个质数。他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。口袋的负载量就是口袋里的所有数字之和。但是口袋的承重量有限,不能装得下总和超过100000的质数。给出 LL,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。输入格式一行一个正整数 L。输出格式将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。#include <stdio.h&g
2022-02-11 23:35:09 214
原创 算法笔记PAT:B1019 数字黑洞
****加粗样式给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。输入格式:输入给出一个 (0,104) 区间内的正整数 N。输出格式:如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000;否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例
2022-02-05 21:18:27 115
原创 贪心算法找零钱
题目描述小智去超市买东西,买了不超过一百块的东西。收银员想尽量用少的纸币来找钱。纸币面额分为50 20 10 5 1 五种。请在知道要找多少钱n给小明的情况下,输出纸币数量最少的方案。 1<=n<=99;输入有多组数据 1<=n<=99;输出对于每种数量不为0的纸币,输出他们的面值数量,再加起来样例输入2532样例输出20*1+5*120*1+10*1+1*2#include <iostream>#include<algorithm&g
2022-01-29 21:32:15 1557
转载 借鉴别人的代码讲一下八皇后问题
心得:这个八皇后问题一直困惑了很久,看到这篇文章对我帮助很大,一定要理解的是判断两个皇后是否冲突的条件,也就是要放置的皇后行与前一行皇后差的绝对值与列与前一个皇后列差的绝对值是否相等,这个一定要想明白。之后就是递归的实现,作者代码说的很详细,就不追叙了。#include <cstdio>#include <iostream>#include <cmath> #include <algorithm>using namespace std;/*
2022-01-26 23:37:42 85
原创 10个整数分奇偶排序
题目描述输入10个整数,彼此以空格分隔。重新排序以后输出(也按空格分隔),要求:1.先输出其中的奇数,并按从大到小排列;2.然后输出其中的偶数,并按从小到大排列。输入任意排序的10个整数(0~100),彼此以空格分隔。输出可能有多组测试数据,对于每组数据,按照要求排序后输出,由空格分隔。样例输入0 56 19 81 59 48 35 90 83 7517 86 71 51 30 1 9 36 14 16样例输出83 81 75 59 35 19 0 48 56 9071 51 17
2022-01-23 14:00:38 1100 1
有关408操作系统段页式管理的一个问题
2021-07-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人