- 博客(57)
- 收藏
- 关注
原创 第七天业务题
2、使用CAS乐观锁,更新数据前判断数据与之前查询到的是否一致,不一致则其它线程更新过。本次操作放弃或重试。单人超领:单用户频繁点击领取,或者因为网络故障等情况发送了多次请求,导致查询的判断逻辑失效,而导致超领现象。锁的粒度大,性能差,在被锁定的代码又成为了单线程。多人超领:在多线程的情况下运行,同时操作了共享资源,且不具备原子性,从而产生了超领现象。解决方法:添加AspectJ依赖,用其代理对象调用事务方法。兑换码优惠券:是给指定用户发访的,用户需要用指定的兑换码领取。固定天数:优惠券领取后的有效时间。
2024-01-22 21:14:13
451
原创 第六天业务题
由于当前排行榜会根据月份变化,所以需要用到XXL-JOB的定时任务,自动创建mysql数据表,将redis中的数据同步到mysql中,最后删除redis中的数据,这三个步骤缺一不可,所以使用任务链,保证任务成功,这样当新的排行榜数据存入时,不会导致内存溢出。2.历史排行榜是本月之前的用户积分数据,它的访问频率并没有那么高,所以可以存入mysql中,由于数据量太大,所以进行集群分库分表操作,这样更方便删除过早之前的数据,还可以避免存入一个库中数据全部丢失的问题。6-3 请你说一说你的排行榜功能是如何实现的。
2024-01-22 14:32:13
498
原创 第五天业务题
在项目中签到功能,是需要计算连续签到天数,如果使用其他类型去计算的话效率较慢,以及对内存的存储而言是不好的,而使用bitmap类型通过0,1就可以表示是否签到,效率好,内存空间的使用更少。bitmap是Redis中的String类型里的一种类型,存储数据是以二进制(bit位)为单位进行存储的。比如此时有一个1到6的链表,我要找5这个数字,普通的链表是依次向后找出5,而跳表是在这个基础上又加了一层索引。被称为位图,可以用来表示大量的布尔值。保存积分的服务监听MQ队列中的消息,一旦有消息就进行积分的增加。
2024-01-18 21:56:21
483
原创 第三天业务题
此外,MongoDB的文档存储模型也能够更好地支持问答系统中的多级嵌套数据结构,比如问题和对应的回答、评论等,MongoDB还适合存储价值较低的信息(例如:评论),而Mysql适合存储的是对信息安全性有高要求的数据(例如:用户个人信息)。回答表:存储问题的回答/评论,主要字段可能包括回答ID、回答内容、回答者ID、问题ID、回答时间等。问题表和回答表之间是一对多的关系,一个问题可以有多个回答,但一个回答只能对应一个问题。我们的问答系统用到了三张表,分别是:用户表,问题表,回答/评论表。
2024-01-18 21:10:38
478
原创 第二天业务题
首先根据课表的最近一次学习时间确定用户最近学习的一个课程,然后根据课表中的课程id调用课程微服务查询课程信息,再根据课表中的章节id调用课程微服务查询章节信息,最后封装结果返回给前端。用户购买/报名课程到交易模块,完成支付将订单ID、用户ID、课程id等消息发送到MQ,学习服务监听MQ消费消息,执行保存课表操作。根据需求分页查找课表,根据课程id集合收集课程信息转为map,遍历获取到每个课表,赋值。涉及到两个微服务:课表微服务,课程微服务。2-2 说一下查询课表的业务流程。
2024-01-14 21:41:47
354
原创 小白进公司快速熟悉环境和代码的方法
下面这张图,首先浏览器发送请求/wg/a ---> Nginx(反向代理将请求转发到网关) --> 网关(请求转发到Nacos拿到对应微服务地址) --> Nacos(地址返回给网关)-->网关(请求转发)-->对应的微服务。进公司领导让看文档是考察你的第一步,一定要留痕,比如说把项目的流程看通了,直到请求是从浏览器转发的,到哪个网关,网关到哪个微服务,找一个功能看明白就可以比如说登录业务,写清楚,然后分析项目结构.对于需要开发功能的微服务,则需要在本地部署,不过首先我们要把代码拉取下来(git)
2024-01-12 22:57:56
1356
原创 第一天业务题
首先,文章创作者点击发布请求后,先把文章内容保存到数据库,并将文章的状态修改为审核中,然后解析文章内容,分成文本,图片,视频等类型的内容,将文本存到数据库,将图片视频存到MinIO,然后调用第三方的内容审核工具,进行审核,若全部审核通过,会将文章直接发布,并将文章保存到ES,并制作前端静态化页面,如果审核不通过,先获取到不通过的原因,存到数据库并返回给文章创作者,如果需要人工二次审核,会由平台管理员判断是否通过,若不通过,同样返回不通过的原因,以上就是文章发布的流程。1-4 说一下文章发布的流程。
2024-01-12 22:38:23
523
原创 Long类型转换精度丢失问题解决
启动前端项目页面传递的ID和数据库保存的ID不一致原因:给前端返回的id为long类型,在转换json传递到前端以后精度丢失,所以前端给我们的id也是丢失精度的id,不能查询数据。因为js数字类型最大长度为16位,而java的long类型的最大长度为19位。所以如果数据长度大于16位的话传输到前端就会丢失精度。
2024-01-07 20:01:07
1368
原创 Java网络通信
基本的通信架构有2种形式:CS架构( Client客户端/Server服务端 ) 、 BS架构(Browser浏览器/Server服务端)
2023-10-28 20:36:40
136
原创 多线程&线程池
1. 首先判断核心线程数是否已满,如果没满,则创建一个新的核心线程来执行任务.2.如果核心线程满了,则判断阻塞队列是否已满,如果没满,则将任务存储在这个阻塞队列3.如果阻塞队列满了,则判断最大线程数是否已满,如果没满,则创建临时线程执行任务4.如果最大线程数已满,则执行拒绝策略。
2023-10-27 19:58:28
110
原创 Day10配置文件&日志&多线程
在企业开发过程中,我们习惯把一些需要灵活配置的数据放在一些文本文件中,而不是在Java代码写死 我们把这种存放程序配置信息的文件,统称为配置文件。
2023-10-25 21:23:26
126
原创 Day07 Stream流&递归&Map集合&Collections&可变参数
也叫Stream流,是Jdk8开始新增的一套API (java.util.stream.*),可以用于操作集合或者数组的数据。Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式操作。
2023-10-21 21:25:28
441
原创 Day06List接口&Set接口&树
2.Java中的所有对象,都可以调用Obejct类提供的hashCode方法,返回该对象自己的哈希值。要是哈希表中某个位置冲突严重,每个元素取模后都是19,数组对应的链表长度过长,查找效率就会降低!如果一个节点没有子节点,则该节点相应的指针属性为Nil (称为叶子结点),叶子结点是黑色的。LinkedHashSet是不可重复的,存取有序的,底层是基于哈希表(数组、链表、红黑树)实现的。但是,它的每个元素都额外的多了一个双链表的机制记录它前后元素的位置。
2023-10-20 11:07:10
87
原创 Day05异常&Lambda&方法引用&常见算法&正则表达式
2.大部分函数式接口上面都会有一个@FunctionalInterface的注解,有该注解的接口就必定是函数式接口 Lambda格式 (被重写方法的参数列表)->{ 被重写方法的方法体;如果某个Lambda只是调用一个实例方法,并且前面参数列表中第一个参数作为主调,后面的参数作为入参,即可使用 类型::方法。如果某个Lambda表达式里只是在创建对象,并且前后参数情况一致,就可以使用构造器引用 类名::new。Lambda表达式只能简化函数式接口的匿名内部类!被重写方法的方法体;
2023-10-18 20:54:47
138
原创 了解多态&接口&抽象类&常量&枚举
多态是在继承或者实现情况下的一种现象,存在方法重写,具体表现为对象多态、行为多态,属性没有多态优点:1.在多态形式下,等号左右两边松耦合,更便于修改和维护2.定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强、更便利缺点: 不能使用子类独有的功能解决方案:向下转型为具体子类对象1.使用父类接收子类对象后,无法调用子类独有的方法,若想调用需要强转2.引用类型中需要使用instanceof关键字进行判断是否为该类型,若是再转换。
2023-10-14 17:24:06
44
原创 Day01了解Static与extends
静态方法不依赖于任何对象就可以访问,因此内部不能调用非静态成员和方法,常被用做编写工具类.提高代码复用性,通过类名.方法名的方式节省内存空间.被Static修饰的成员变量称为静态变量(类变量),类变量生命周期和类相同,在整个应用程序执行期间都有效,还可以修饰成员方法.1.当子类觉得父类方法不好用,或者无法满足父类需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法。1.默认情况下,子类全部构造器的第一行代码都是 super() (写不写都有),它会调用父类的无参数构造器.
2023-10-14 15:36:58
53
原创 JavaScript基础
1.事件源:被监听的html元素2.事件:某类动作,例如点击事件,移入移出事件,敲击键盘事件等3.事件与事件源的绑定:在事件源上注册上某事件4.事件触发后的响应行为:事件触发后需要执行的代码,一般使用函数进行封装b.
2022-10-18 00:42:02
760
原创 JAVA:HTTP协议(Cookie,session)
Cookie: 就是 A 发给每个客户一个凭证,客户有保存凭证的责任(丢了就不知到是你了),也有下来购买服务携带凭证的责任(不携带也不知道是不是你).无状态:当服务器处理很多 请求-响应后,这些请求 - 响应,是属于几个用户发起的,如何分组,服务器不知道.因为Cookie保存在客户端(谁都可以看,可以改),碰到恶意用户修改了Cookie,会有问题.浏览器会保存自己的Cookie,不同浏览器之间不共享!Cookie有一个问题: 发的凭证卡有所有用户的信息。
2022-08-21 01:08:40
210
原创 Java:HTTP协议(2)
4. 当请求来临时,Sping通过HTTP请求的标准格式,可以解析出本次请求的资源路径是什么,记为path,根据path去第三步map中找到对应的方法。被这些注解中一个修饰的方法(并且存在于@Controller修饰的类中),会被作为一个动态资源存在,资源最终的URL路径,就是注解中标注的路径.1. run方法会扫描web1包下的所有类文件(*.class),找到被@Controller注解修饰的类。1.get是幂等的无副作用:每次查询的结果都一样,不会改变表中的数据。执行顺序:1,3,4,2。
2022-08-19 13:21:01
149
原创 Java:HTTP协议 - 基础概念(1)
Web应用的基本单位是Web资源.Web资源分布在网络中的任意主机上,所以本机的浏览器要获取这些Web资源,就必须通过一种网络协议 ---- HTTP协议。HTTP在1.0,1.1,2.0是基于TCP协议之上进行工作的(HTTP协议中本身没有设计任何提供可靠的机制,依赖传输层及以下网络已经提供可靠服务)....
2022-08-16 16:38:38
152
原创 HashMap底层原理!!!
Map:存储键值对,key不可以重复无序,value可以重复,Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象,Hashmap的key为null只能存储一个,TreeMap不能存储null。(1).HashSet是基于HashMap实现的,HashSet的值存放于HashMap的key上,HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成,HashSet 不允许重复的值。...
2022-08-04 18:48:36
176
原创 Java:线程池
Java规范明确表示yeld和sleep不一定会强制刷新工作内存读取主存保证100%可见性volatile,synchronized,final(在定义时就要赋值且无法修改)
2022-07-17 12:37:22
198
原创 Java:Scanner
int等基本类型的数组使用sc.nextInt()while(sc.hasNext())循环读取。Sting类型的使用sc.next()两者都是以空格作为结束标记!nextLine碰到回车停止。next碰到空格停止。不能用for的情况下。
2022-07-17 10:49:47
68
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人