Coderyeah🍉
GO实现结构体切片的自定义排序规则
结构体排序需要实现Interface接口,实现其中三个方法。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253package mainimport ( "fmt" "math/rand" "sort")// 接口最佳实践func main() { intSlice := []int{-2, 60, 3, 6, 2, 99, 78, 22} // 排序 sort.Ints(intSlice) fmt.Println(intSlice) fmt.Println("----------------/学生结构体切片排序前\\----------------------") var stuSlice studentSlice for i := 0; i < 10; i++  ...
GO语言实现冒泡排序、顺序查找、二分查找
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394package mainimport "fmt"func main() { arr := [5]int{23, 56, 2, 117, 88} // 创建一个长度为5的整型数组arr,并赋值 fmt.Println(arr) // 打印arr数组 BubbleSort(&arr) // 调用BubbleSort函数对arr进行排序 fmt.Println("sort:", arr) // 打印排序后的arr数组 //SequentialLooku ...
go的协程和管道运用案例
一.同时向管道读写数据12345678910111213141516171819202122232425262728293031323334353637package mainimport "fmt"func main() { writeChan := make(chan int, 20) // 写入通道,缓冲大小为20 exitChan := make(chan bool) // 退出通道 go readData(writeChan, exitChan) // 启动readData协程 go writeData(writeChan) // 启动writeData协程 for { v, ok := <-exitChan // 接收退出通道值 if ok { fmt.Println("完成:", v) // 打印完成信息 break // 退出循环 } & ...
分布式事务的实现方案和redis缓存配置
一.什么是分布式事务针对于单数据库的事务我们叫着本地事务/传统事务,在分布式环境中一个请求可能涉及到多个数据库的写操作(多数据源),要保证多数据源的一致性必须用到分布式事务。 二.为什么需要分布式事务系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并操作多个数据库实现,服务调用的分布式事务问题变的非常突出。 一个下单请求同时设计到订单库,优惠券库,库存库的写操作,需要保证三个库写操作的一致性,就要用到分布式事务 即:分布式事务就是要解决一个请求同时对多个数据库写操作的一致性 注意:微服务拆分原则,尽量让大部分操作都不要跨微服务操作,也就是跨库。 分布式事务比本地事务耗费的资源更多。 三.分布式事务解决方案 2PC方案2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段( Prepare phase).提交阶段( pphase ) , 2是指两个阶段, P是指准备阶段, C是指提交阶段。 在第一阶段(准备阶段),事务管理器先事务参与者(资源)们发送准备请求,大家都返回OK状态,那么就进入第二阶段,提交事务,如果在第一阶段有任何一个参与者没有OK,那么事务协调器通知 ...
常见中间件ES和RocketMQ的面试题
一. RocketMQ如何防止消息丢失MQ的消息生成到消费主要经历三个阶段:MQ消息生产、RocketMQ Broker存储消息、消费者消息对应的消息。如下图: 消息丢失情况 消息生产者将消息发送到RocketMQ Broker的这个过程可能出现消息丢失。 生产者只要接收到返回的ack,就代表这个阶段的消息未丢失。 生产者通过网络将消息发送到Broker,然后等待Broker响应ack,此时的网络是不可靠的,极有可能导致消息发不出去,或者Broker在ack时网络故障导致生产者收不到ack。 RocketMQ Broker接收到生产者发送的消息存储的过程消息可能丢失。 Broker收到消息后是先存储在内存中的,然后再持久化到磁盘,Broker刚收到Producer消息存储在内存中,然后发生宕机,就会导致消息丢失。 RocketMQ的持久化消息有两种方式:同步刷盘:Broker收到消息后会在持久化到磁盘完成后才发送ack 异步刷盘:Broker收到消息存到内存后返回ack,然后Broker定期将一组消息持久化到磁盘 默认是异步刷盘,要保证存储阶段不丢失消息,可以修改为同步刷盘,即确保 ...
常见数据库优化面试题
一.在项目中如何定位慢查询 通过 druid 连接池的内置监控来定位慢 SQL。 通过 MySQL 的慢查询日志查看慢 SQL。 通过 show processlist,查看当前数据库 SQL 执行情况来定位慢 SQL。 二.如何查看sql语句索引命中情况在 SQL 语句前加上 explain,结果中的 key 就是实际用到的索引 三.说说数据库锁表的场景和解决方法 产生场景 锁表通常发生在 DML( insert 、update 、delete )语句中,例如:程序 A 对 A 表的 a 数据 进行修改,修改过程中产生错误,没有 commit 也没有 rollback ,这个时候程序 B 对 A 表的 a 数据进行修改,会产生资源正忙的异常,也就是锁表。 DDL也会引发锁表,例如在 MySql 操作一张大表,利用 alter 语句修改或新增字段的时候,恰巧有一个长事务(包括读)在操作此表,会触发修改等待,造成锁表。 原因 当多个事务处理对多个资源同时访问时,若双方已锁定一部分资源但也都需要对方已锁定的资源时,无法在有限的时间内完全获得所需的资源,就会处于无限的等待状态,从而造成其 ...
常见的并发面试题
一.进程与线程的区别? 进程是操作系统进行资源分配的最小单元,线程是操作系统进行运算调度的最小单元。 进程中包含了线程,线程属于进程。 进程的内存和资源是该进程下的线程所共享的。 二.创建线程的方式以及区别? 继承Thread类:需要实现 run() 方法。通过 Thread 调用 start() 方法来启动线程。 实现Runnable接口:同样也是需要实现 run() 方法,并且最后也是调用 start() 方法来启动线程。 实现Callable 接口:与 Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。 使用ExecutorService、Callable、Future实现有返回结果的多线程。 实现接口会更好一些,因为:Java 不支持多继承,因此继承了 Thread 类就无法继承其它类,但是可以实现多个接口;类可能只要求可执行即可,继承整个 Thread 类开销会过大。 Thread和Runable的区别和联系 Thread类实现了Runable接口。都需要重写里面Run方法。 不同:实现Runnable的类更具有 ...
编写一个可以增加行和删除行的表格组件
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022 ...
菜单权限和按钮权限的实现,以及JWT的使用
一. 概述 一个系统中用户登陆之后看到的菜单,必须是当前登录人拥有权限的菜单才能展示,没有权限的菜单直接不显示; 使用无状态token方案,登录只存储了loginInfo信息,没有登录人相关的权限(菜单、按钮权限); 难道我们在登录的时候需要将登录人相关的权限信息也一并存储到redis中码? 答:如果人数多,并发量大,redis就不是一个好的方案:redis是一个内存数据库,内存有局限,数据量越大,内存占用率高,影响读取性能。 二. 无状态的token方案 后端验证登录信息成功之后,会生成一个随机串作为token将用户信息保存在redis,并将token令牌传回给浏览器; 后续浏览器只需要将token携带到服务器,服务器就可以根据浏览器的token令牌获取redis的信息 2.1. 如果获取不到信息,说明token令牌无效 2.2. 获取到信息,就向客户端返回请求的数据 缺点: 每次请求都需要查库【查询redis数据库】,效率低 如果redis保存的数据多【用户登录信息,当前用户的权限信息,当前用户的菜单信息】,会影响性能。 三. JWT方案1. 为什么要用JWT ? ...
avatar
🐟认真摸鱼中
Coderyeah🍉
Future is now 🍭🍭🍭
前往小窝
公告栏
小站资讯
文章数目 :
93
本站总字数 :
28.3w
本站访客数 :
本站总访问量 :
最后更新时间 :
空降评论复制本文地址
随便逛逛昼夜切换阅读模式关于博客美化设置切换全屏打印页面