因期末考试鸽了一段时间,学校学的确实没啥用,但我的学历还是得提升一下才能够到大厂,所以选择了保研,可能也是高考的不甘心吧,被绩点困住的分奴负荆请罪。 撑住就剩半年了,我就能做我想做的事了。
Redis课程学习小结
1. Redis的必要性与工作原理
-
为什么需要Redis
-
高性能:基于内存存储,读写速度快
-
降低数据库压力:作为缓存层,减少直接访问数据库的次数
-
支持多种数据结构:String、Hash、List、Set、Sorted Set等
-
原子性操作:保证数据一致性
-
基本工作原理
-
内存存储:数据存储在内存中,支持持久化
-
单线程模型:避免了多线程的竞争问题
-
IO多路复用:高效处理并发连接
2. Redis应用案例
-
缓存场景
-
热点数据缓存
-
接口数据缓存
-
页面缓存
-
计数器功能
-
文章阅读量统计
-
用户点赞数统计
-
商品库存计数
-
分布式锁
-
秒杀场景
-
并发控制
3. 字节跳动Redis使用注意事项
-
性能优化
-
合理设置过期时间
-
避免大key
-
使用批量操作提升性能
-
数据安全
-
做好容灾备份
-
监控内存使用
-
防止缓存穿透、击穿、雪崩
-
最佳实践
-
遵循规范的key命名
-
合理使用数据结构
-
做好监控和告警
总结
Redis作为一个高性能的缓存中间件,在现代互联网架构中扮演着重要角色。合理使用Redis不仅能提升系统性能,还能降低数据库压力。在实际应用中,需要注意性能优化、数据安全等问题,遵循最佳实践来确保Redis的稳定运行。
解题思路
-
首先需要分别收集字母和数字,同时记录问号和原始位置
-
对收集到的字母和数字分别排序(字母升序,数字降序)
-
按照原始位置重建字符串
算法分析
1. 时间复杂度:
-
遍历字符串:O(n)
-
排序字母和数字:O(k log k),其中k是字母或数字的数量
-
总体时间复杂度:O(n + k log k),其中n是字符串长度
-
空间复杂度:
-
O(n),需要存储原始位置和排序后的结果
关键点说明
-
字符分类处理:
-
使用Character.isLetter()判断字母
-
使用Character.isDigit()判断数字
-
其他字符(问号)保持原位置
-
排序规则:
-
字母按字典序升序排列
-
数字按从大到小降序排列
-
问号位置保持不变
-
位置记录:
-
使用单独的列表记录字母和数字的原始位置
-
排序后根据记录的位置重建字符串
-
注意事项:
-
数字转换时需要注意字符和数值的转换
-
保持原始位置不变是关键要求
-
需要分别处理字母、数字和问号三种情况
这个解决方案能够有效处理各种输入情况,并且保持了代码的清晰性和可维护性。