- 博客(21)
- 收藏
- 关注
原创 阿里云--宝塔面板docker创建mysql镜像容器
环境变量按需,一定要设密码,如果不想root就设置用户名密码。基础设置注意版本,端口一般3306(图片是8080)新版宝塔面板更新后docker管理器不再提供维护。可以把日志文件挂载映射,方便后期管理。最后别忘了放行端口,点安全。上面设置什么端口就放行什么。
2024-12-13 21:23:51
512
原创 关于即将到来的C2B平台的可能形式
然而,在互联网时代,尤其是电子商务平台和流媒体服务的发展,使得无限的商品种类可以在线上展示和销售,降低了库存成本和分发障碍,使得那些不太流行但仍然有市场需求的“长尾”产品也能够找到自己的消费者,即。基于以上论点,会发现一个很严重的问题,假如我是一个只会上网付钱的典型消费者,现在我的需求是:我家餐桌腿是倾斜的,与墙壁之间有一条缝隙,我希望有一个宽度刚好的板材能填补这条缝隙,同时上方延伸出一个支架,具备内嵌电源插座、自带平板支架(我要在上面卡我的全屋智能家居中控、也方便我吃饭时追剧)、和一个能放餐巾纸的位置。
2024-12-10 23:21:30
805
原创 常见技术场景
搭建ELK日志采集系统:即Elasticsearch、Logstash和Kibana三个软件的首字母 Elasticsearch是全文搜索分析引擎,可以对数据存储、搜索、分析。查询某一个日志行号区间:cat -nxx.log|tail-n +100|head -n100(查询100行至200行的日志)(1)先分析日志,通常在业务中都会有日志的记录,或者查看系统日志,或者查看日志文件,然后定位问题。压测目的:给出系统当前的性能状况;
2024-12-04 13:06:29
457
原创 设计模式问题
策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户 一个系统需要动态地在几种算法中选择一种时,可将每个算法封装到策略类中。对比较长的职责链,请求的处理可能涉及多个处理对象,系统性能将受到一定影响。
2024-12-03 21:20:45
204
原创 JVM组成、类加载器
2.当伊甸园内存不足,标记伊甸园与 from(现阶段没有)的存活对象3.将存活对象采用复制算法复制到to中,复制完毕后,伊甸园和 from 内存都得到释放4.经过一段时间后伊甸园的内存又出现不足,标记eden区域to区存活的对象,将其复制到from区5.当幸存区对象熬过几次回收(最多15次),晋升到老年代(幸存区内存不足或大对象会提前晋升)无碎片,内存使用率低。加载某一个类,先委托上一级的加载器进行加载,如果上级加载器也有上级,则会继续向上委托,如果该类委托上级没有被加载,子加载器尝试加载该类。
2024-11-27 21:59:06
263
原创 线程池及使用场景
【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。(3)并发高、任务执行时间长>解决这种类型任务的关键不在于线程池而在于整体架构的设计,看看这些业务里面某些数据是否能做缓存是第一步,增加服务器是第二步,至于线程池的设置,设置参考(2)(3)newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
2024-11-26 21:37:31
762
原创 线程安全问题
像ReentrantLock、Semaphore都是基于AQS实现的AQS内部维护了一个先进先出的双向队列,队列中存储的排队的线程在AQS内部还有一个属性state,这个state就相当于是一个资源,默认是0(无锁状态),如果队列中的有一个线程修改成功了state为1,则当前线程就相等于获取了资源。wait 方法执行后会释放对象锁,允许其它线程获得该对象锁(我放弃 cpu,但你们还可以用)而 sleep 如果在 synchronized 代码块中执行,并不会释放对象锁(我放弃 cpu,你们也用不了)
2024-11-25 14:57:04
254
原创 集合(复杂度、数组、链表、HashMap)
线程一先将A移入新的链表,再将B插入到链头,由于另外一个线程的原因,B的next指向了A,所以B->A->B,形成循环,当然,JDK8 将扩容算法做了调整,不再将元素加入链表头(而是保持与扩容前一样的顺序),尾插法,就避免了jdk7中死循环的问题。Arrays.asList转换list之后,如果修改了数组的内容,list会受影响因为它的底层使用的Arrays类中的一个内部类ArrayList来构造的集合,在这个集合的构造器中,把我们传入的这个集合进行了包装而已,最终指向的都是同一个内存地址。
2024-11-23 16:00:05
1145
原创 消息中间件
每条业务设置唯一标识id,我们再处理消息时,先到数据库查询一下,这个数据是否存在,如果不存在,说明没有处理过,这个时候就可以正常处理这个消息了。可以采用仲裁队列,与镜像队列一样,都是主从模式,支持主从数据同步,主从同步基于Raft协议,强一致并且使用起来也非常简单,不需要额外的配置,在声明队列的时候只要指定这个是仲裁队列即可。分区副本分为了两类,一个是ISR,与leader副本同步保存数据,另外一个普通的副本,是异步同步数据,当leader挂掉之后,会优先从ISR副本列表中选取一个作为leader。
2024-11-19 11:41:35
291
原创 微服务相关问题
服务熔断:默认关闭,需要手动打开,如果检测到10s内请求失败率超50%,就触发熔断机制,之后每隔5s重新尝试请求微服务,如果微服务不能响应,继续走熔断机制,如果微服务可达,则关闭熔断机制,恢复正常请求。服务降级:服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃,一般在实际开发中与feign接口整合,编写降级逻辑。第二次请求,业务处理,携带之前的token,到redis进行验证,如果存在,可以执行业务,删除token;
2024-11-18 17:22:20
558
原创 MyBatis执行、延迟加载、缓存相关
(4)底层原理首先使用CGLIB创建目标对象的代理对象,然后当调用目标方法时,进入拦截器invoke方法,发现目标方法是null值,执行sql查询,获取数据后,调用set方法设置属性值,再继续查询目标方法,就有值了。(2)二级缓存:基于namespace和mapper作用域起作用,不依赖于SQLsession,默认也是采用PerpetualCache的HashMap存储,需单独开启,一个是核心配置,一个是mapper映射文件。MyBatis 支持两种级别的缓存:一级缓存(本地缓存)和二级缓存(全局缓存)。
2024-11-14 22:11:40
537
原创 Springboot框架相关
1.Spring框架中的单例bean是线程安全的吗?不是,Spring框架中的@Scope注解用于指定Bean的作用域,默认值就是singleton,单例的,这意味着在整个应用程序上下文中,该Bean只有一个实例。在一般的spring的bean中都注入的是无状态对象,没有线程安全问题,如果在bean中定义了可修改的成员变量,则要考虑线程安全问题,可使用多例或加锁解决2.什么是AOP?哪些场景能用到?spring中的事物是如何实现的?
2024-11-09 21:46:56
1013
原创 Mybatis-plus代码生成器(代码部分参考官方指南)
IDEA提供的许多快捷键和工具 生成的都是一些基础代码,这些功能通常是针对单个类或方法级别的,而 MyBatis-Plus 的代码生成器则更加全面和自动化,可以生成整个项目的多个层次的代码,一些做一个简单的区分。Generate Code (Alt+Insert):Live Templates:File and Code Templates:多层代码生成:数据库表到代码的映射:自定义模板:自动注入和配置:使用:1.引入依赖(新代码生成器仅支持3.5.1及以上版本):2.快速生成:3.交互式生成:
2024-11-08 21:48:15
436
原创 MYSQL事物、主从同步、分库分表
版本链:多个事务并行操作某一行记录,记录不同事物修改数据的版本,通过roll_pointer指针形成一个链表。事物是一组操作的组合,它是一个不可分割的工作单位,事物会把所有操作作为一个整体一起向系统提交或撤销,即这些操作要么同时成功,要么同时失败。幻读:一个事物按照条件查询数据时,没有对应数据行,但在插入数据时又发现数据已存在,疑似出现幻影。trx_id:事物id,记录每一次操作的事物id,是自增的。(2)undo log记录的是逻辑日志,当事物回滚时,通过逆操作恢复原来的数据。
2024-11-08 15:18:47
378
原创 MYSQL优化的一些问题
是指在复合索引(即由多个列组成的索引)中,只有当查询条件中包含了索引的最左边的一个或几个列时,该索引才有可能被使用。可以使用覆盖索引+子查询解决,比如先分页查询数据id字段,然后用子查询过滤,因为查询id走的覆盖索引,所以效率高。(2)非聚簇索引:数据与索引分开存储,B+数叶子结点只保存对应主键,可以有多个(一般用于单独给字段创建的索引)查询使用了索引,返回的列必须在索引中可以全部找到(查询结果覆盖查询字段)(1) 如使用id查询,直接走聚集索引查询,一次性返回所有数据,性能高。
2024-11-07 21:15:33
470
原创 Redis数据淘汰、分布式锁及集群
(5)redisson锁能否解决主从数据一致问题:不能,可以使用redisson中的红锁,但这样性能太低,如果一定要保证数据强一致性,可以使用zookeeper实现分布式锁。:相比传统的阻塞I/O模型,I/O多路复用模型可以显著提高程序处理大量并发连接的能力,因为它不需要为每个连接创建一个独立的线程或进程,减少了上下文切换和内存消耗。(3)根据key有效部分(key前有大括号,大括号内就是有效部分,没有就是key本身)计算哈希值,对16384取余,余数作为插槽,寻找插槽所在实例。
2024-11-06 16:53:45
589
原创 redis缓存雪崩、数据同步、持久化及过期删除策略
(2)对于允许延时一致的业务,采用异步通知,可使用MQ中间件,更新数据后再通知缓存删除,或利用canal中间件,不修改业务代码,canal伪装为mysql的一个从节点,canal通过读取binlog数据更新缓存;可看作命令日志,通过更改redis.conf文件进行配置,共三种配置项,always同步刷盘,性能差,everysec每秒刷盘,用的多,no操作系统控制,性能好,数据可能大量丢失;FAST模式,频率不固定,两次间隔不低于2ms,每次耗时不超过1ms。(2)利用Redis集群提高服务可用性,
2024-11-03 20:46:57
388
原创 为什么基于布隆过滤器的误判难以避免
当查询一个元素是否存在时,该元素会通过相同的哈希函数计算出对应的位数组位置,如果这些位置上的值都是1,则认为该元素可能存在于集合中;随着插入到布隆过滤器中的元素数量增加,发生哈希冲突的概率也会增加,从而增加了误判的可能性。3. 空间限制:为了减少误判率,可以增加位数组的大小或使用的哈希函数的数量。布隆过滤器的误判难以避免,但可以通过调整参数来控制误判率在一个可接受的范围内。这意味着即使后来发现某些位是因为其他元素的存在而被错误地标记为1,也没有办法纠正这种状态,这进一步增加了误判的可能性。
2024-11-02 18:58:47
437
原创 基于Redis构建项目时的缓存穿透与缓存击穿问题
将数据经过3次hash函数计算后得到的hash值存储在统一数组中,定位数据时经过hash计算在数组中查找,由于位图数组长度有限,因此具有误判率,可基于Redisson或Guava实现定义误判率,一般为5%;基于Redis构建缓存时如何解决缓存击穿问题(给某一个key设置了过期时间,当key过期时,有大量对该key的并发请求在这一时刻进入,这些并发请求可能瞬间压垮DB)拿到锁后新开线程重置key过期时间并释放锁,该线程直接返回过期数据,其他线程未拿到锁直接返回过期数据,一致性差,高可用;
2024-11-02 18:55:14
169
原创 阿里云oss对象存储服务如何从环境变量中获取访问凭证
新建两个系统变量,变量名分别是OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。变量值是你自己访问阿里云 API 的密钥AccessKey ID 和 AccessKey Secret。
2024-08-06 22:02:55
1491
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅