获得徽章 1
#挑战每日一条沸点#
通过ip地址+uri拼接用以作为访问者访问接口区分
通过在Interceptor中拦截请求,从Redis中统计用户访问接口次数从而达到接口防刷目的
通过ip地址+uri拼接用以作为访问者访问接口区分
通过在Interceptor中拦截请求,从Redis中统计用户访问接口次数从而达到接口防刷目的
评论
点赞
#挑战每日一条沸点#
项目整体规模较小但也算是五脏俱全,有认证相关、有支付相关、也有分布式问题相关。对于没有做过个人项目特别是没做过支付项目的小伙伴来说,用来练手或者写在简历上都是未尝不可的。
项目整体规模较小但也算是五脏俱全,有认证相关、有支付相关、也有分布式问题相关。对于没有做过个人项目特别是没做过支付项目的小伙伴来说,用来练手或者写在简历上都是未尝不可的。
评论
点赞
#挑战每日一条沸点#
捣鼓一个小程序:
个小程序是集成自己常用的功能,让它成为自己的生活小助手,一周的时间完成了两个小功能:挪车码-鉴于微信的强大,使用微信的小程序码 是比较方便的;天气预报
捣鼓一个小程序:
个小程序是集成自己常用的功能,让它成为自己的生活小助手,一周的时间完成了两个小功能:挪车码-鉴于微信的强大,使用微信的小程序码 是比较方便的;天气预报
评论
点赞
#挑战每日一条沸点#
阅读源码的方式:
搭建 Demo
方法论之关注调用栈
方法论之死盯日志
方法论之查看被调用的地方
探索答案
阅读源码的方式:
搭建 Demo
方法论之关注调用栈
方法论之死盯日志
方法论之查看被调用的地方
探索答案
展开
评论
点赞
#挑战每日一条沸点#
设计数据库表结构需要考虑到以下4个方面:
数据库范式:通常情况下,我们希望表的数据符合某种范式,这可以保证数据的完整性和一致性。例如,第一范式要求表的每个属性都是原子性的,第二范式要求每个非主键属性完全依赖于主键,第三范式要求每个非主键属性不依赖于其他非主键属性。
实体关系模型(ER模型):我们需要先根据实际情况画出实体关系模型,然后再将其转化为数据库表结构。实体关系模型通常包括实体、属性、关系等要素,我们需要将它们转化为表的形式。
数据库性能:我们需要考虑到数据库的性能问题,包括表的大小、索引的使用、查询语句的优化等。
数据库安全:我们需要考虑到数据库的安全问题,包括表的权限、用户角色的设置等。
在设计数据库表结构时,可以参考以下几个优雅的设计原则:
简单明了:表结构应该简单明了,避免过度复杂化。
一致性:表结构应该保持一致性,例如命名规范、数据类型等。
规范化:尽可能将表规范化,避免数据冗余和不一致性。
性能:表结构应该考虑到性能问题,例如使用适当的索引、避免全表扫描等。
安全:表结构应该考虑到安全问题,例如合理设置权限、避免SQL注入等。
扩展性:表结构应该具有一定的扩展性,例如预留字段、可扩展的关系等。
设计数据库表结构需要考虑到以下4个方面:
数据库范式:通常情况下,我们希望表的数据符合某种范式,这可以保证数据的完整性和一致性。例如,第一范式要求表的每个属性都是原子性的,第二范式要求每个非主键属性完全依赖于主键,第三范式要求每个非主键属性不依赖于其他非主键属性。
实体关系模型(ER模型):我们需要先根据实际情况画出实体关系模型,然后再将其转化为数据库表结构。实体关系模型通常包括实体、属性、关系等要素,我们需要将它们转化为表的形式。
数据库性能:我们需要考虑到数据库的性能问题,包括表的大小、索引的使用、查询语句的优化等。
数据库安全:我们需要考虑到数据库的安全问题,包括表的权限、用户角色的设置等。
在设计数据库表结构时,可以参考以下几个优雅的设计原则:
简单明了:表结构应该简单明了,避免过度复杂化。
一致性:表结构应该保持一致性,例如命名规范、数据类型等。
规范化:尽可能将表规范化,避免数据冗余和不一致性。
性能:表结构应该考虑到性能问题,例如使用适当的索引、避免全表扫描等。
安全:表结构应该考虑到安全问题,例如合理设置权限、避免SQL注入等。
扩展性:表结构应该具有一定的扩展性,例如预留字段、可扩展的关系等。
展开
评论
点赞
#挑战每日一条沸点#
导航是加载网页的第一步。它指的是当用户通过点击一个链接、在浏览器地址栏中写下一个网址、提交一个表格等方式请求一个网页时发生的过程。
在上一节中,我们谈到了导航,这是浏览器显示网站的第一步。现在,我们将进入下一个步骤,看看如何获取资源。
我们看到在向服务器发出初始请求后,浏览器如何收到包含我们尝试访问的网页的 HTML 资源(第一块数据)的响应。 现在浏览器的工作就是开始解析数据。
解析完 HTML 之后,就该解析 CSS(在外部 CSS 文件和样式元素中找到)并构建 CSSOM 树(CSS 对象模型)。
在解析 CSS 并创建 CSSOM 的同时,还会下载其他资产,包括 JavaScript 文件。 这要归功于我们在之前文章中提到的预加载器。
除了我们一直在讨论的所有这些树(DOM、CSSOM 和 AST)之外,浏览器还构建了一种称为可访问(无障碍)树的东西。
在解析阶段构建的树(DOM、CSSOM)被组合成一种叫做渲染树的东西。 这用于计算最终将绘制到屏幕上的所有可见元素的布局。 渲染树的目的是确保页面内容以正确的顺序绘制元素。 它将作为在屏幕上显示像素的绘画过程的输入。
导航是加载网页的第一步。它指的是当用户通过点击一个链接、在浏览器地址栏中写下一个网址、提交一个表格等方式请求一个网页时发生的过程。
在上一节中,我们谈到了导航,这是浏览器显示网站的第一步。现在,我们将进入下一个步骤,看看如何获取资源。
我们看到在向服务器发出初始请求后,浏览器如何收到包含我们尝试访问的网页的 HTML 资源(第一块数据)的响应。 现在浏览器的工作就是开始解析数据。
解析完 HTML 之后,就该解析 CSS(在外部 CSS 文件和样式元素中找到)并构建 CSSOM 树(CSS 对象模型)。
在解析 CSS 并创建 CSSOM 的同时,还会下载其他资产,包括 JavaScript 文件。 这要归功于我们在之前文章中提到的预加载器。
除了我们一直在讨论的所有这些树(DOM、CSSOM 和 AST)之外,浏览器还构建了一种称为可访问(无障碍)树的东西。
在解析阶段构建的树(DOM、CSSOM)被组合成一种叫做渲染树的东西。 这用于计算最终将绘制到屏幕上的所有可见元素的布局。 渲染树的目的是确保页面内容以正确的顺序绘制元素。 它将作为在屏幕上显示像素的绘画过程的输入。
展开
评论
点赞
#挑战每日一条沸点#
new Date()的“四宗罪”及应用思考
1. Safari浏览器不兼容YYYY-MM-DD这样的格式
2、月份的索引是以0为起点的,而年份、日期却不是
3、年份小于100,默认以19xx或20xx开头
4、日期初始化不统一,存在时区差异
应用思考
在日常开发中,我们应用new Date()无非就是对时间运算及时间的格式化。
1. 时间的计算
需要方便对比两个时间的早晚,可以分别对年份、月份、日期、小时等进行单独比较。而我们现有的操作还比较麻烦。
比如,我想知道2003年7月13日北京申奥成功到2008年8月8日北京奥运开幕中间差了几天,如何快速计算?这样的计算在日常开发中还比较常见,特别是电商网站对抢购环节的倒计时。
还有诸如,当前时间在100天以后又是几月几号呢?
2. 时间的比较
给定两个时间,判断哪个在前,哪个在后;给定一个时间返回,判断某个时间是不是在这两者之间。
3. 时间的格式化
在网站开发中,我们最常见的就是对后台返回时间戳的格式化显示。而原生带来的仅有年份如何获取,月份如何获取,日期如何获取的方法,就方便的无非就是toISOString()这样的方法,但是返回的却不一定是你要的格式。如何快速实现自定义格式化字符串,这也是一门技术。
new Date()的“四宗罪”及应用思考
1. Safari浏览器不兼容YYYY-MM-DD这样的格式
2、月份的索引是以0为起点的,而年份、日期却不是
3、年份小于100,默认以19xx或20xx开头
4、日期初始化不统一,存在时区差异
应用思考
在日常开发中,我们应用new Date()无非就是对时间运算及时间的格式化。
1. 时间的计算
需要方便对比两个时间的早晚,可以分别对年份、月份、日期、小时等进行单独比较。而我们现有的操作还比较麻烦。
比如,我想知道2003年7月13日北京申奥成功到2008年8月8日北京奥运开幕中间差了几天,如何快速计算?这样的计算在日常开发中还比较常见,特别是电商网站对抢购环节的倒计时。
还有诸如,当前时间在100天以后又是几月几号呢?
2. 时间的比较
给定两个时间,判断哪个在前,哪个在后;给定一个时间返回,判断某个时间是不是在这两者之间。
3. 时间的格式化
在网站开发中,我们最常见的就是对后台返回时间戳的格式化显示。而原生带来的仅有年份如何获取,月份如何获取,日期如何获取的方法,就方便的无非就是toISOString()这样的方法,但是返回的却不一定是你要的格式。如何快速实现自定义格式化字符串,这也是一门技术。
展开
评论
点赞
#挑战每日一条沸点#
Android 和 IOS 被小程序替代了很多,但前端目前没有发现什么可替代技术,反而前端早已慢慢的占据其他技术领域,如客户端、服务端。
新的技术如 Flutter WebAssembly 都是对当下前端技术的补充,真实 TS 也不是为了替代 ES ,它也是一个补充和备选方案。
浏览器 + HTML CSS JS + HTTP ,目前没有任何技术可以替代它,反而它们正在加速进化和完善。Vue React 小程序,目前也已经牢牢占据了高地,前端技术的范式早已形成。
Android 和 IOS 被小程序替代了很多,但前端目前没有发现什么可替代技术,反而前端早已慢慢的占据其他技术领域,如客户端、服务端。
新的技术如 Flutter WebAssembly 都是对当下前端技术的补充,真实 TS 也不是为了替代 ES ,它也是一个补充和备选方案。
浏览器 + HTML CSS JS + HTTP ,目前没有任何技术可以替代它,反而它们正在加速进化和完善。Vue React 小程序,目前也已经牢牢占据了高地,前端技术的范式早已形成。
展开
评论
点赞
#挑战每日一条沸点#
js 作为前端的中坚力量。那么 javascript 三座大山,你知道是哪些呢?
作用域 指代码当前上下文,控制着变量和函数的可见性和生命周期。最大的作用是隔离变量,不同作用域下同名变量不会冲突。闭包是函数作用域下的产物,闭包会随着外层函数的执行而被同时创建,它是一个函数以及其捆绑的周边环境状态的引用的组合。换而言之,闭包是内层函数对外层函数变量的不释放。
有对象的地方就有 原型,每个对象都会在其内部初始化一个属性,就是prototype(原型),原型中存储共享的属性和方法。当我们访问一个对象的属性时,js引擎会先看当前对象中是否有这个属性,如果没有的就会查找他的prototype对象是否有这个属性,如此递推下去,一直检索到 Object 内建对象。这么一个寻找的过程就形成了 原型链 的概念。
JavaScript 是 单线程 语言,意味着只有单独的一个调用栈,同一时间只能处理一个任务或一段代码。队列、堆、栈、事件循环构成了 js 的并发模型,事件循环 是 JavaScript 的执行机制。
js 作为前端的中坚力量。那么 javascript 三座大山,你知道是哪些呢?
作用域 指代码当前上下文,控制着变量和函数的可见性和生命周期。最大的作用是隔离变量,不同作用域下同名变量不会冲突。闭包是函数作用域下的产物,闭包会随着外层函数的执行而被同时创建,它是一个函数以及其捆绑的周边环境状态的引用的组合。换而言之,闭包是内层函数对外层函数变量的不释放。
有对象的地方就有 原型,每个对象都会在其内部初始化一个属性,就是prototype(原型),原型中存储共享的属性和方法。当我们访问一个对象的属性时,js引擎会先看当前对象中是否有这个属性,如果没有的就会查找他的prototype对象是否有这个属性,如此递推下去,一直检索到 Object 内建对象。这么一个寻找的过程就形成了 原型链 的概念。
JavaScript 是 单线程 语言,意味着只有单独的一个调用栈,同一时间只能处理一个任务或一段代码。队列、堆、栈、事件循环构成了 js 的并发模型,事件循环 是 JavaScript 的执行机制。
展开
评论
点赞
#挑战每日一条沸点#
Gradianto插件
支持 idea的相关皮肤,是我用过比较好用,ui风格很好的一款插件
jclasslib Bytecode viewer插件
class文件反编译插件 ->jclasslib is a bytecode viewer for Java class files。 可是反编译class文件,当然这针对于老版本的idea,新版本的idea已经自动集成该功能了。
Grep Console 插件
可以将控制台打印的日志分颜色显示,可以如下进行设置。
GenerateAllSetter 插件
一键生成一个对象的所有set方法 。插件可以快速生成 Java 类中的所有属性的 setter 方法,让你可以更快地为对象的各个属性添加 setter。帮助你加快 Java 开发工作流程,自动化生成 setter 方法的创建,提高开发效率
GsonFormat 插件
使用 alt+s 快捷键调起。
使用 GsonFormat 插件可以大大简化在开发过程中手动创建 Java 类的工作量。生成的 Java 类将包含与输入的 JSON 字符串中的键和值对应的属性和方法。这使得在处理 JSON 数据时更加方便和快捷
JRebel and XRebel 插件
热部署插件(这个我都用多介绍了吧)。
Tomcat启动相关配置(jrebel启动tomcat时需要加载的项目配置): CATALINA_BASE=E:\下载文件\java产品\tomcat\apache-tomcat-7.0.76-windows-x64\apache-tomcat-7.0.76
热部署jar包中的jsp , js 等代码时,需要在pom文件中配置相应的打包代码。然后再rebel.xml部署jsp等页面的本地文件地址,即可实时生效。
leetcode editor 插件
一个连接leetcode官网的插件。当我们摸鱼的时候,我们就可以每天都在idea中练习一下,还没人发现你在摸鱼,真香。
Statistic 插件
统计代码量多少的一个插件。
Translation 插件
这是一款国人开发的插件,每当你查看源码的doc文档时,看到满屏的英文您累嘛?说实话对我这种英文渣来说,这是在是一件痛苦的事情,但是该插件解救了我。感谢作者。
Gradianto插件
支持 idea的相关皮肤,是我用过比较好用,ui风格很好的一款插件
jclasslib Bytecode viewer插件
class文件反编译插件 ->jclasslib is a bytecode viewer for Java class files。 可是反编译class文件,当然这针对于老版本的idea,新版本的idea已经自动集成该功能了。
Grep Console 插件
可以将控制台打印的日志分颜色显示,可以如下进行设置。
GenerateAllSetter 插件
一键生成一个对象的所有set方法 。插件可以快速生成 Java 类中的所有属性的 setter 方法,让你可以更快地为对象的各个属性添加 setter。帮助你加快 Java 开发工作流程,自动化生成 setter 方法的创建,提高开发效率
GsonFormat 插件
使用 alt+s 快捷键调起。
使用 GsonFormat 插件可以大大简化在开发过程中手动创建 Java 类的工作量。生成的 Java 类将包含与输入的 JSON 字符串中的键和值对应的属性和方法。这使得在处理 JSON 数据时更加方便和快捷
JRebel and XRebel 插件
热部署插件(这个我都用多介绍了吧)。
Tomcat启动相关配置(jrebel启动tomcat时需要加载的项目配置): CATALINA_BASE=E:\下载文件\java产品\tomcat\apache-tomcat-7.0.76-windows-x64\apache-tomcat-7.0.76
热部署jar包中的jsp , js 等代码时,需要在pom文件中配置相应的打包代码。然后再rebel.xml部署jsp等页面的本地文件地址,即可实时生效。
leetcode editor 插件
一个连接leetcode官网的插件。当我们摸鱼的时候,我们就可以每天都在idea中练习一下,还没人发现你在摸鱼,真香。
Statistic 插件
统计代码量多少的一个插件。
Translation 插件
这是一款国人开发的插件,每当你查看源码的doc文档时,看到满屏的英文您累嘛?说实话对我这种英文渣来说,这是在是一件痛苦的事情,但是该插件解救了我。感谢作者。
展开
评论
点赞
#挑战每日一条沸点#
如何设计一个几十万在线用户弹幕系统:
在MQ中我们可以进行限流,这样WebSocket就不用频繁的去操作了。尤其类似于弹幕这种业务,也不是说要求实时的。一般我们发送一条弹幕,都会过个几秒钟我们自己才能看见,所以我们可以根据自己服务器的性能来决定消费速度。
一般都会选择在用户发送一条弹幕之后就存储这条弹幕,如果用户发送一条弹幕我们就同步的将这条数据存储到MySql中,那么这时候有几十万的弹幕该怎么办? 这时候数据库的压力就很大了。因为弹幕这种数据丢个几条对我们业务没有任何影响,所以我们可以选择异步存储,比如将要保存弹幕信息发送到MQ,MQ异步的将消息存储到MySql中。
对于弹幕查询,我们后续可以将数据同步到搜索引擎Elasticsearch中,后续的查询就直接查ES就好,就不用查数据库,避免对数据库造成压力。
如何设计一个几十万在线用户弹幕系统:
在MQ中我们可以进行限流,这样WebSocket就不用频繁的去操作了。尤其类似于弹幕这种业务,也不是说要求实时的。一般我们发送一条弹幕,都会过个几秒钟我们自己才能看见,所以我们可以根据自己服务器的性能来决定消费速度。
一般都会选择在用户发送一条弹幕之后就存储这条弹幕,如果用户发送一条弹幕我们就同步的将这条数据存储到MySql中,那么这时候有几十万的弹幕该怎么办? 这时候数据库的压力就很大了。因为弹幕这种数据丢个几条对我们业务没有任何影响,所以我们可以选择异步存储,比如将要保存弹幕信息发送到MQ,MQ异步的将消息存储到MySql中。
对于弹幕查询,我们后续可以将数据同步到搜索引擎Elasticsearch中,后续的查询就直接查ES就好,就不用查数据库,避免对数据库造成压力。
展开
评论
点赞
#挑战每日一条沸点#
订单30分钟未支付自动取消怎么实现?
了解需求
方案 1:数据库轮询
方案 2:JDK 的延迟队列
方案 3:时间轮算法
方案 4:redis 缓存
方案 5:使用消息队列
订单30分钟未支付自动取消怎么实现?
了解需求
方案 1:数据库轮询
方案 2:JDK 的延迟队列
方案 3:时间轮算法
方案 4:redis 缓存
方案 5:使用消息队列
展开
评论
点赞
#挑战每日一条沸点#
推荐逻辑是基于用户的行为和兴趣。当用户在小红书使用时,平台会根据关键词搜索、浏览习惯、点赞、评论、收藏等行为数据,通过人工智能算法分析用户兴趣偏好,向其推荐相关的内容和商品。
要想笔记获得小红书的更高的推荐与曝光,关键是从用户需求和兴趣出发,注重笔记的品质、原创性和社交性。同时,要通过关键词的使用,优化笔记的内容和标签,提升搜索引擎的识别度和推荐效果。
推荐逻辑是基于用户的行为和兴趣。当用户在小红书使用时,平台会根据关键词搜索、浏览习惯、点赞、评论、收藏等行为数据,通过人工智能算法分析用户兴趣偏好,向其推荐相关的内容和商品。
要想笔记获得小红书的更高的推荐与曝光,关键是从用户需求和兴趣出发,注重笔记的品质、原创性和社交性。同时,要通过关键词的使用,优化笔记的内容和标签,提升搜索引擎的识别度和推荐效果。
展开
评论
点赞
#挑战每日一条沸点#
一直都是用的 Typora+微博免费图床写作,前段时间突然发现图片全都裂了,打开一看都是 403 。原来 403 是限制了Referrer,写代码还是可以下载下来的,只要扫描我的所有 md 文件=>找到所有的微博图床的图片链接=>下载所有图片=>上传到新图床=>替换图片链接,就可以搞定。
一直都是用的 Typora+微博免费图床写作,前段时间突然发现图片全都裂了,打开一看都是 403 。原来 403 是限制了Referrer,写代码还是可以下载下来的,只要扫描我的所有 md 文件=>找到所有的微博图床的图片链接=>下载所有图片=>上传到新图床=>替换图片链接,就可以搞定。
展开
评论
点赞
#挑战每日一条沸点#
MySQL 数据库优化的相关问题的三个层面:
硬件层面:CPU 处理数据的能力的强弱直接影响着 MySQL 数据库处理数据的时间;网卡的转发能力的强弱影响着网络延时的长短;
存储引擎层面:MySQL 数据库仍然认为底层使用的是机械硬盘,更换固态硬盘之后的 MySQL 数据库性能得到提升;
SQL 语句层面:好的索引可以极大优化数据库
MySQL 数据库优化的相关问题的三个层面:
硬件层面:CPU 处理数据的能力的强弱直接影响着 MySQL 数据库处理数据的时间;网卡的转发能力的强弱影响着网络延时的长短;
存储引擎层面:MySQL 数据库仍然认为底层使用的是机械硬盘,更换固态硬盘之后的 MySQL 数据库性能得到提升;
SQL 语句层面:好的索引可以极大优化数据库
展开
评论
点赞