Java知识
文章平均质量分 78
以基础知识为主
sqyaa.
已在谷底,怎么走都是向上
展开
-
索引。。。
对于单列索引,尽量选择针对当前query过滤性更好的字段进行索引在选择组合索引的时候,当前query中过滤性最好的字段在索引字段顺序中,位置越靠前越好。在选择组合索引的时候,尽量选择能够包含当前query中的where子句中更多字段的索引。(区分度越高)在选择组合索引的时候,如果某个字段可能出现范围查询时,尽量把这个字段放在索引次序的最后面。==总之,写SQL时,尽量避免造成索引失效的情况。==理解方式一。原创 2024-03-10 22:20:24 · 1002 阅读 · 0 评论 -
大文件上传
同时,为了提高上传和下载的效率,可以使用分块传输、断点续传等技术,减少因网络不稳定等原因导致的传输失败。后端接收到MD5值,在服务器中查找是否存在该md5对应的文件,如果服务器存在该文件,则直接返回已存在的文件路径,完成秒传。另外,为了提高效率,可以考虑使用分布式文件系统或对象存储服务来存储文件,以便实现文件的高可用和快速访问。如果所有块的哈希值都匹配,服务器将把块合并成完整的文件,并计算文件的 MD5 哈希值。在实际实现中,可以使用Java的MessageDigest类来计算文件的MD5值,使用。原创 2024-03-08 00:47:24 · 628 阅读 · 0 评论 -
java——2024-03-03
10.死锁是两个或者多个线程去争夺同一共享资源而导致的互相等待过程,在没有外部条件干预则会一直阻塞下去,每个线程都在等待另一个线程去释放锁。死锁有三个典型情况,第一个是。原创 2024-03-06 01:14:40 · 1056 阅读 · 1 评论 -
mq基础类设计
解耦合:就是在分布式系统中,A服务器调用B服务器,A给B发送请求,B给A返回响应,A和B之间耦合性很大。引入消息队列后,A把请求发给消息队列,B再从消息队列获取请求。削峰填谷:B接收,A传送过多,B会感受到峰值,而B的硬盘之类资源有限,有消息队列,B仍然可以按照原本速度进行接收数据。消息队列就是把阻塞队列这样的数据结构单独提取成一个程序独立进行部署。broker中间人负责转发和存储,mq和消费者的工作模式主要有两种,推:push,Broker把收到的消息主动。消息队列是在进程与进程之间进行实现的,原创 2024-03-05 12:01:19 · 424 阅读 · 1 评论 -
ReentrantLock &信号量&CountDownLatch&多线程环境使用集合类ArrayList和ConcurrentHashMap
ReentrantLock 也是一个可重入锁,使用了lock和unlock方式加锁解锁,使用效果上和 synchronized 是类似,1. ReentrantLock,在加锁的时候,有两种方式. lock, tryLock.给了更多的可操作空间lock(): 加锁, 如果获取不到锁就死等.trylock(超时时间): 加锁, 如果获取不到锁, 等待一定的时间之后就放弃加锁.原创 2024-02-21 11:58:54 · 1000 阅读 · 0 评论 -
synchronized原理&Callable接口
synchronized加锁的时候,并不是真正的加锁,而是先进入偏向锁状态,就相当于做一个标记,如果一直没有别的线程来获取这个锁,那么就不会升级,仅仅只做个标记,因为这个变量本来就只有这个线程要使用,过程也没有出现锁竞争,执行完synchronized{}代码块后,再取消掉标记(偏向锁)即可。但是,如果很快就释放锁了,自旋是值得的,可以立即获取被释放的锁,反之,迟迟不被释放,那么久迟迟拿不到锁,自旋就不划算了..这时候就需要再次升级了!相当于"懒汉模式"提到的懒加载一样,非必要,不加锁。原创 2024-02-21 11:58:15 · 1131 阅读 · 0 评论 -
常见锁策略以及CAS
是典型的重量级锁,指当一个线程尝试获取锁时,如果锁已被其他线程占用,则该线程将会被挂起(即阻塞,阻塞的开销很大),直到锁可用为止。CAS 操作是原子性操作,它可以保证在多线程环境下对共享数据的操作是线程安全的。一个线程针对同一把锁连续加锁两次如果不会出现死锁就是可重入锁,sychronized就是可重入锁,其中引入计数器,并对锁的持有线程进行身份标识,当发现当前加锁的线程就是持有锁的线程就直接进行+1操作。是典型的轻量级锁,是一种忙等的锁,当一个线程尝试获取自旋锁时,如果锁已被其他线程占用,该线程会一直。原创 2024-02-21 11:57:23 · 792 阅读 · 0 评论 -
线程池,,
线程池,事先把需要用的线程创建好,放到线程池中,后面需要使用的时候,直接从池中获取,如果用完了,就还给线程池,这两个操作是比创建线程/销毁线程要更加高效的。原创 2024-02-17 17:43:32 · 546 阅读 · 0 评论 -
计算机网络——IP协议
网络层的主要负责地址分配和路由选择,ip负责在网络中进行数据包的路由和传输。原创 2024-01-28 15:09:52 · 1182 阅读 · 0 评论 -
两个数组的动态规划——最长公共子序列模型
1.考虑空串,即dp表多出一行一列, 代表某个字符串为空。2.考虑最后一个位置;是否相等;3.可在字符串最前面加虚拟位置以对应映射关系;4.一般横行是j,列是i。此时第一行代表第二个字符串不为空,即第一个字符串是空的。原创 2024-01-26 21:46:39 · 1103 阅读 · 0 评论 -
TCP/IP分层模型 和网络原理之UDP和TCP
计算机网络指的是将多台计算机通过通信设备(如路由器、交换机等)连接起来,以实现数据和信息的传输和共享。它是现代信息技术的重要组成部分,提供了在全球范围内进行数据通信和资源共享的基础设施。原创 2024-01-26 21:42:36 · 1151 阅读 · 3 评论 -
计算机网络——TCP协议
TCP的可靠不在于它是否可以把数据100%传输过去,而是1.发送方发去数据后,可以知道接收方是否收到数据;2.如果接收方没收到,可以有补救手段;原创 2024-01-26 21:42:16 · 5581 阅读 · 7 评论 -
动态规划——01背包和完全背包
有一个背包能容纳的体积是v,现在有n个物品,第i个物品的体积为vi,价值为wi。(1)求这个背包至多能装多大价值的物品?(2) 若背包恰好装满,求至多能装多大价值的物品?输入描述:第一行两个整数n和V,表示物品个数和背包体积接下来n行,每行两个数u;和wi表示第i个物品的体积和价值原创 2024-01-16 17:05:44 · 1207 阅读 · 5 评论 -
MySQL——触发器·
MySQL的触发器(Trigger)是在数据库中定义的一种特殊类型的存储过程,它会在指定的数据库事件发生时自动执行。触发器可以用于实现数据的自动更新、完整性约束、日志记录等功能。表示触发器响应的数据库事件类型,可以是插入、更新或删除操作,表示触发器执行的时机,可以是在数据库事件之前或之后执行,是触发器的执行体,可以包括SQL语句和存储过程等。表示对每一行记录都要执行触发器,是触发器所关联的表名,原创 2023-12-23 18:55:55 · 284 阅读 · 0 评论 -
mysql——索引篇
mysql相关原创 2023-12-14 18:04:51 · 809 阅读 · 0 评论 -
SpringBoot整合Redis——实现点赞功能
标签系统:可以将每个标签作为Set的一个元素,然后用Set进行标签的各种操作,比如求交集、并集、差集等,以便于实现文章、商品等的分类和搜索。去重:Set中的元素不能重复,因此可以用来存储去重后的数据。原创 2023-12-13 20:59:03 · 1117 阅读 · 4 评论 -
列表分页功能的实现(后端)
在分页查询中,每一次查询都会将所有符合条件的数据都查出来,然后再根据当前页码和页面大小进行截取和封装。而在深度分页的情况下,这种实现方式会导致查询结果非常庞大,网络传输和内存消耗都会很大,甚至可能造成系统崩溃。原创 2023-12-06 17:10:06 · 134 阅读 · 0 评论 -
分页功能的实现
在分页查询中,每一次查询都会将所有符合条件的数据都查出来,然后再根据当前页码和页面大小进行截取和封装。而在深度分页的情况下,这种实现方式会导致查询结果非常庞大,网络传输和内存消耗都会很大,甚至可能造成系统崩溃。原创 2022-11-13 16:28:45 · 80 阅读 · 0 评论 -
实现加盐加密方法以及MappedByteBuffer,RandomAccess
加盐加密算法的实现以及大文件操作涉及的MappedByteBuffer,RandomAccess介绍原创 2023-12-06 15:36:32 · 228 阅读 · 0 评论 -
redis——单线程工作模型
需要注意的是,虽然Redis是单线程的,但它允许在不同的进程或服务器上运行多个实例,以提高可扩展性和性能。虽然Redis是单线程的,但它可以处理大量的请求,并支持每秒数百万级别的操作。redis的单线程模型指的是只使用一个线程去处理所有命令请求,并不是说redis进程服务器只有一个线程, 也有多个线程,多个线程用于处理网络IO。当多个请求同时到达redis服务器,redis的单线程模型就保证了当前收到的请求指令是串行执行的,例如,在学校,下课,大家都跑去饭堂, 都去排米饭,此时还是要在窗口处排队的。原创 2023-12-04 12:44:47 · 106 阅读 · 1 评论 -
dp之最长的斐波那契子序列的长度&最长等差数列
请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。连续子数组 [4,-1,2,1] 的和最大,为 6。是数组中的一个连续部分。原创 2023-12-04 11:45:13 · 76 阅读 · 3 评论 -
redis—— 渐进式遍历
之前学过key* 获取所有的key,但是这个操作可能会一次性得到太多的key,阻塞redis服务器,所以不建议在生产环境中使用。KEYS *命令需要遍历整个数据库中的所有键名,这对于大型的 Redis 数据库来说会非常耗时和资源消耗。KEYS *命令会阻塞 Redis 服务器的主线程,这意味着在执行这个命令期间,Redis 将无法处理其他客户端的请求。安全问题:如果在生产环境中误操作使用KEYS *命令,可能会导致非常严重的安全问题。原创 2023-11-27 23:17:56 · 400 阅读 · 1 评论 -
Java---打家劫舍ⅠⅡ
这些都属于简单多状态的动态规划问题。原创 2023-02-27 14:46:17 · 1354 阅读 · 5 评论 -
记忆化搜索,dp——路径问题,最长递增子序列
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。网格的左上角 (起始点在下图中标记为 “Start” )。问总共有多少条不同的路径?原创 2023-11-22 17:56:23 · 82 阅读 · 1 评论 -
java io流中为什么使用缓冲流就能加快文件读写速度
在文件读取方面,FileInputStream和BufferedInputStream都有各自的优缺点。是一个基于字节的输入流,它从文件中读取字节数据。使用FileInputStream读取文件时,每次读取都会直接从磁盘中读取一个字节,这样会导致频繁的磁盘I/O操作,从而影响文件读取的效率。而则是一个基于字节的缓冲输入流,它利用了缓冲区的机制,每次读取一定量的数据到缓冲区中,然后逐个字节地将数据从缓冲区中读取。因为缓冲区可以预读数据并存储在内存中,所以可以减少磁盘I/O次数,从而提高文件读取的效率。原创 2023-11-22 00:46:06 · 578 阅读 · 4 评论 -
redis的过期策略以及定时器的实现
基于 redis 实现分布式锁为了避免出现不能正确解锁的情况通常都会在加锁的时候设置一下过期时间.(所谓的使用redis 作为分布式锁就是给 redis 里写一个特殊的 key value)1.redis 中并没有采取 定时器 的方式来实现过期 key 删除2.如果有多个 key 过期,也可以通过一个定时器来高效/节省cpu的前提下来处理多个 key ~~通过惰性过期和定期过期策略的结合,Redis可以高效地管理键的过期,并保持内存的合理使。expire作用是给指定的 key 设置过期时间。原创 2023-11-21 15:52:31 · 204 阅读 · 2 评论 -
扫雷游戏到底啥规则?!dfs模拟实现规则
本篇文章dfs实现扫雷游戏的规则。第一次玩扫雷是小学,当时对这个游戏不太感兴趣,感觉就是看运气随便玩玩,如今再看,哈哈哈也是有规则的!刚玩了几把游戏没错就是刚才,哈哈哈哈哈哈,差点就赢了😭,虽然还是简单局!但足以摸清一小点规则。1.当揭示一个空白方格(周围没有雷)时,游戏会自动揭示周围的方格。2.每个数字表示该方格周围的雷的数量,周围就按照米字型!让我们一起来玩扫雷游戏!3.点到雷,玩家out。)中的下一个点击位置(原创 2023-11-21 02:19:24 · 130 阅读 · 2 评论 -
正难则反的floodfill
介绍dfs系列的 被围绕的区域,太平洋大西洋水流问题,核心思想就是正难则反,floodfill,正向思维:从每一个地方去看是否能到达大西洋和太平洋;逆向思维:从太平洋和大西洋的 边界出发 ,标记能达到的地方。标记两次true的就是。原创 2023-11-20 19:59:57 · 54 阅读 · 0 评论 -
dfs--不同路径Ⅲ&Floodfill--图像渲染,岛屿数量
错误原因:直接在for循环里面写 if(grid[i][j]==2){check[i][j]=true;返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目。关键:step=count(0的个数)+2(1,2两个结束位置)这样会导致0的个数都没统计完你就去递归了😅必然错了。才开始错误的原因是:我没有用bx和by,原创 2023-11-19 18:19:18 · 64 阅读 · 1 评论 -
单词搜索&黄金矿工
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。原创 2023-11-19 12:27:37 · 66 阅读 · 0 评论 -
动态规划——回文系列总结
介绍回文串或者子序列的基本解决思路,以及变成回文的最少操作次数和最长回文子序列原创 2023-11-17 01:55:58 · 190 阅读 · 7 评论 -
Redis的特性以及使用场景
是一个基于客户端-服务器架构的在的,属于NoSQL的一种。它可以用作,具有很高的灵活性和多样化的应用场景。作为一种内存数据库,Redis将数据存储在内存中,因此能够实现非常快速的读写操作。与磁盘存储相比,内存存储能够大幅提升数据的访问速度。这使得Redis成为一个系统,能够将频繁访问的数据存储在内存中,从而提高读取性能。此外,Redis还提供了丰富的数据结构支持,包括字符串、哈希表、列表、集合和有序集合等,使得它不仅可以简单地存储键值对,还可以处理复杂的数据结构,满足各种不同的需求。原创 2023-11-13 00:30:01 · 386 阅读 · 3 评论 -
JVM组成,类加载机制,GC回收机制以及双亲委派模型
Java 程序最开始写的是.java 文件.编译成 .class 文件,字节码运行 java 程序,JVM 就会读取 class 文件,把文件的内容,放到内存中,并且构造成.class 对象。即把硬盘的类加载到内存。原创 2023-11-06 13:27:03 · 142 阅读 · 4 评论 -
最长公共前缀
介绍最长公共前缀的解法和连续子数组的最大和的dp,前缀和解法原创 2023-11-02 01:18:09 · 34 阅读 · 0 评论 -
Java——栈和队列练习
引言中缀表达式转后缀表达式逆波兰表达式求值栈的压入,弹出序列栈的实现括号匹配问题队列用栈实现队列原创 2023-04-04 08:38:57 · 393 阅读 · 3 评论 -
SpringMVC涉及的头像类文件上传以及postman使用遇到的问题
This file isn‘t in your working directory. Teammates you share this request with won‘t be able to us原创 2023-10-31 12:00:33 · 70 阅读 · 6 评论 -
挖坑法,Hoare,非递归法实现快速排序
快速排序的优化原创 2023-10-28 17:36:14 · 132 阅读 · 1 评论 -
【Java】摩尔投票法(简洁明了)
摩尔投票法用于找到一个数组中出现次数超多数组长度一半的元素。初始化;由于不同的票之间是相互对立的,当当前的被投票候选人与下一个被投票的候选人相同时,投票数++,不同时投票数--;当投票数vote=0时,则将候选人更新为当前遍历到的这个候选人,如此重复;由于要找到的候选人的被投票个数超过数组长度的一半,遍历完数组后,得到的候选人candidate就是要找的。原创 2023-01-31 11:02:59 · 257 阅读 · 3 评论 -
复习mysql中的事务
在MySQL中,事务是一组数据库操作的逻辑单元,它要么全部执行成功,要么全部回滚到事务开始前的状态,以保证数据的一致性和完整性。事务以原子性、一致性、隔离性和持久性(ACID)为特征。MySQL使用了InnoDB存储引擎来支持事务处理。它采用了行级锁定的机制,并提供了四个隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。不同的隔离级别决定了事务之间的并发控制策略和数据的可见性。原创 2023-10-22 20:30:33 · 217 阅读 · 3 评论 -
Spring中的事务
Spring中的事务管理是基于Spring框架来实现的,它提供了多种事务管理的方式,包括编程式事务管理和声明式事务管理两种方式。编程式事务管理通过手动控制事务的提交、回滚和异常处理等细节来进行事务管理。这种方式需要在代码中显式地进行事务控制,通常通过使用TransactionTemplate或者直接使用PlatformTransactionManager接口来完成。相对而言,声明式事务管理则将事务的控制从代码中抽离出来,以非侵入的方式来进行事务管理。它利用AOP(面向切面编程)机制对方法进行拦截,原创 2023-10-22 17:49:46 · 207 阅读 · 2 评论