
编程思想
JokerSoulClub
这个作者很懒,什么都没留下…
展开
-
分享一个利用redis缓存挡住高频的数据库读写的架构设计
以上架构实际上是将数据库作为数据仓库使用,实际的业务处理放置在redis中的,特别是大大降低了数据库写入的操作,相当于所有的数据库业务相关的写入都进行了合并延时写入。这种思路其实之前也有过,不过之前都是考虑合并http的写入请求,但反馈给用户的时间会大大增加,例如本来1秒响应的,现在需要收集3秒内的写入请求统一处理后返回,那么用户最长要等3秒。其实不只是订单相关的业务,任何涉及到频繁读写的业务,包括但不限于,购物车,硬件运营参数,接收订阅数据等。原创 2024-02-06 10:33:14 · 1073 阅读 · 0 评论 -
后端三层架构,其中接口是否被滥用了?
发现无论是.net还是java,在传统的web应用中,接口完全没有意义,举以下的例子转账的接口public interface TransMoney(){ bool transMoney(String id,int money);}这里是实现类public class TransMoneyImp implements TransMoney{ @Override public bool transMoney(String id,int money){ //具体实现 }}传统的w原创 2022-04-15 16:52:06 · 1307 阅读 · 0 评论 -
redis的妙用其一,实现服务端耗时操作的异步获取
业务中经常会出现这样一个场景,我们的服务端会去调用第三方api,并且把得到的数据处理后返回给前端(或者需要我们的登录才能调用)一般的做法都是用同步的方式直接在代码中请求,这种方式一定要设置请求的超时时间很短,否则高并发情况下,我们的服务端就会崩溃,因为同步阻塞的原因另一种情况,就是服务端请求的api本来就很耗时,例如一定需要至少1分钟以上的时间才能正常返回,这个时候,可以考虑在服务端使用多线程,用异步的方式获取返回的内容,在不阻塞正常的前端请求的情况下,提前给前端返回正在请求中的状态,从而避免了高原创 2022-02-09 18:16:59 · 788 阅读 · 0 评论 -
数据库设计其一,前置库的使用场景
首先写这篇文章有个大前提,那就是,我们的web系统的业务库必须只能由我们自己的代码或者自己的连接工具连接,不可以让任何第三方通过数据库链接直连.如果让第三方通过数据库链接直连,相当于把系统的稳定性寄托于他们不会滥用你宝贵的数据库连接然后是如何与第三方进行数据交换,分为以下几种情形1.我方需要获取第三方的数据,我方提供web接口的方式(对方有开发量一般不会接受)我方提供数据库链接的方式(前置库)第三方提供数据库连接的方式(一般很难)2.第三方需要获取我方的数据,原创 2022-01-25 15:02:08 · 7732 阅读 · 0 评论 -
数据库表设计其二,中央关系表设计模式
常见的web系统,一般采用关系型数据库例如mysql,oracle,sqlserver之类的数据表的设计,尤其是存在关联的若干表的设计对业务功能的实现,特别是业务功能的可拓展性尤为重要现介绍一种基于中央集成关系数据的中央关系表设计模式以一个常见的业务场景为例表A表示的是 扫地,负责的是id为2的同学,dutyId表示学生id,examineId表示监督的老师ididdutyIditemexamineId12扫地3表B表示同学表idname1原创 2021-12-29 17:27:03 · 545 阅读 · 0 评论 -
浏览器调用exe并从中获取内容的通用解决方案之浏览器和本地exe通信篇
除了IE支持OCX可以直接在浏览器内部,其他所有现代浏览器都不支持内嵌exe执行并交互返回内容了采用的是本地HttpListener监听端口,然后前端轮询jsonp的方式实现浏览器和本地exe通信,浏览器兼容性高,只要是支持xhr的浏览器都行,exe程序启动可以依靠自定义协议在浏览器打开或者将exe打包成window服务持久化运行即可以下是基础Http类using System;using System.Collections;using System.Collections.Generic;原创 2021-12-22 16:30:50 · 1794 阅读 · 0 评论 -
关于只有id和pid的递归数据无法表示所有的树关系这件事的论证
现有树关系(js对象表示)[{ id:1, pId:null, children:[{ id:3, pId:1, children:[{ id:4, pId:3 },{ id:5, pId:3 }] }]},{ id:2, pId:null, children:[{ id:3, pId:2, children:[{ id:4, pId:3 },{ id:6, pId:3 }] }]}]返回的a原创 2021-12-16 17:23:26 · 732 阅读 · 0 评论 -
互联网访问共享灰产,你所访问的每个网站都在记录你的ip和访问内容,并推送到各个平台......
无语了,随便访问了几篇科技新闻,论坛上就给我推送新闻中出现的内容了,那些新闻内容所在的网站,明显就是收集了我的ip地址和访问内容,然后推送给各个其他平台,如果平台内正好有新闻内容相关的推广,那么自然而然的我把这个称为互联网访问共享灰产,后面是一张巨网,所有网民都在访问的同时,都被记录当前的ip和访问内容,然后各大网站会共享这些信息(也可能存在利益输送关系),从而精准推送内容手机端其实也是一样的,不过手机端的ip变化远比电脑端快的多,所以只能通过app定向收集信息难以通过ip来精准收集信息...原创 2021-11-04 10:28:05 · 287 阅读 · 0 评论 -
数据库表设计其一,中央字典表设计模式
不多说废话中央字典表,即字典表集成管理,主要用于业务表内存储的代码在使用过程中翻译成对应中文建立中央字典表的意义在于只需要管理一张表,4个字段的增删改查即可实现全系统内代码的翻译工作核心字段如下ID 随机id作为主键可选用自增序列或者uuidCODE 代码,即业务表存储的代码NAME 中文含义,即业务表代码对应的中文含义TYPE 字典类型代码(建议使用字典类型代码,将字典类型对应代码额外存储在另一张表中)OUTKEY 关键字段,这个outkey字段主要用于关联其他信息,例如部门字典表,可能还原创 2021-10-19 14:38:10 · 481 阅读 · 0 评论 -
web端文件的上传,服务端的存储,客户端下载设计模式
1.文件上传需要支持多路同时上传,或者单路依次上传,利用web worker 和file 切片实现上传进度,断点续传,多人同传同一md5的文件实现大文件多人加速上传2.服务端存储上传的文件以md5作为名称存储,同md5名的前端实现妙传效果同时存储用户上传的文件原始名称以及生成的随机uuid作为用户文件的唯一标志存放数据库3.下载根据数据库存放的用户文件唯一标志,下载时设置Content-Disposition,设置文件名为用户上传的文件名,提供下载...原创 2021-09-23 15:29:35 · 200 阅读 · 0 评论 -
论同一个文件多人同时上传的可实现性
1.首先确定同一个文件是以该文件的md5值(前端通过spark-md5得到)为准2.前端将文件传给web worker,利用解析出的bufferArray的slice方法切片3.后端将要上传的文件生成md5的文件名,此方法必须同步,因为只能允许有唯一的文件名,后续的传同一个文件的人会收到当前已经有人在传那个文件的消息4.后端维护一个hash表,存储的是对应文件md5以及各文件块5.其他传同一个文件的人传的是带前缀的md5文件名,并且传递过程实时记录在hash表中6.根据当前人数和上传进度情况has原创 2021-09-18 16:33:39 · 876 阅读 · 0 评论 -
关于依赖注入控制反转,以及接口在此过程中扮演的角色
不论语言,依赖注入控制反转和语言没有直接关系,只要是存在类,封装行为(不管是直接还是间接实现)的编程语言都可以上伪代码(例如人要穿衣服)class 西装 { //西装也是衣服的一种 private int size //尺寸 private int price //价格 public 西装(int size,int price){ this.size=size this.price=price }}class 人{ private int age= //年龄 p原创 2021-07-16 14:05:16 · 112 阅读 · 0 评论