所谓架构,意即系统架构,广义上它涵盖业务架构、运维架构、组织架构等所有系统构建场景,本文特指一般开发人员主要关注的开发架构。 关于架构的理论有很多,每个人也都有各自的理解,笔者相信很多人在实际运用中也会遇到各种各样的问题和困惑,本文抛开教条,从一个实际项目的演化看何为架构。 项目背景 开始之前,先了解下项目背景。该项目原本是为某东南亚公司开发的图库,提供图片使用授权服务,正规项目。无奈当地营商环境鱼龙混杂,黑白手段层出不穷,有好几个其它项目要么被DDOS,要么流量被劫持,要么莫名出现违规内容,搞得该公司苦不堪言,这回干脆重金悬赏,遍求挑梁贤能。这不,被笔者一个在国内灵活就业的朋友揭了榜,几年之...

  Awp8G9E5LYte   15天前   26   0   0 架构设计

写在前面:本文所述未必符合当前最新情形(包括蓝牙技术发展、微信小程序接口迭代等)。 微信小程序为蓝牙操作提供了很多接口,但在实际开发过程中,会发现隐藏了不少坑。目前主流蓝牙应用都是基于低功耗蓝牙(BLE)的,本文介绍相关的几个基础接口,并对其进行封装,便于业务层调用。 蓝牙发展 在开发蓝牙应用程序之前,有必要对蓝牙这项技术做大致了解。 经典蓝牙 一种短距离无线通信标准,运行在2.4GHz频段,主要用于两个设备之间的数据传输。 一般将蓝牙4.0之前的版本称为经典蓝牙,其传输速率在1-3Mbps之间。虽然有着不错的传输速率,但由于功耗较大,难以满足移动终端和物联网的需求,逐渐被更先进的版本所取代。...

  Awp8G9E5LYte   16天前   42   0   0 其他手机开发

存储区​ Android一开始就将存储区分为内部存储和外部存储,对应手机自带的存储和可插拔的sd卡(可类比于PC的硬盘和U盘)。 内部存储容量有限,Google建议App数据尽量存储于外部存储中。 随着硬件技术发展,自带大容量空间的手机开始出现,关于内部存储的描述逐渐偏离现实了,于是从Android4.4(API19)开始,官方不再将机身存储等同于内部存储,而是从逻辑上将其一部分划到外部存储,限制剩下那部分的容量,也就是现在所谓的内部存储。这一操作,使得原本内部存储和外部存储的特性和使用场景得以延续。 当然,如果在4.4系统及以上的手机上插了sd卡,那么sd卡也属于外部存储。 我们可以使用如下...

  Awp8G9E5LYte   22天前   36   0   0 Android开发

编程编的久了,总会遇到多线程的情况,有些时候我们要几个线程合作完成某些功能,这时候可以定义一个全局对象,各个线程根据这个对象的状态来协同工作,这就是基本的线程同步。 支持多线程编程的语言一般都内置了一些类型和方法用于创建上述所说的全局对象也就是锁对象,它们的作用类似,使用场景有所不同。.Net中这玩意儿有很多,若不是经常使用,我想没人能完全记住它们各自的用法和相互的区别。为了便于查阅,现将它们记录在此。 ps:本文虽然关注.Net平台,但涉及到的大部分锁概念都是平台无关的,在很多其它语言(如_Java__)中都能找到对应。_ 锁模式 正式介绍各种锁之前,先了解下锁模式——锁分为内核模式锁和用...

  Awp8G9E5LYte   23天前   38   0   0 .NET

对于囊中羞涩的我们来说,只要能白嫖,就绝不乱花钱。惯常申请免费SSL/TLS证书的途径有: 各大云服务平台限量提供。比如阿里云会给每个账号每年20个证书的申请额度。缺点是不支持泛域名,且一年(目前已缩短至三个月)后须重新申请并部署; 一些网络服务商如Cloudflare会提供自动化的证书服务,只要在它们的官网作简单配置即可。缺点是流量都要经其中转,在某些未很好覆盖的区域网站性能会受限; 直接从免费证书颁发机构(CA)那里申请。通过脚本可使得获取、安装和续期SSL/TLS证书完全自动化。缺点是有一定的操作门槛。 本文介绍最后这种方式。 免费CA选择 免费CA,常考虑的有Let’sEncryp...

  Awp8G9E5LYte   2024年08月06日   30   0   0 其他技术区

本文所述操作适用于兼容S3协议的所有存储框架,包括AWSS3、AliyunOSS、MinIO、Ceph等。 不知为何,截止目前,S3协议并不包含对象重命名的接口。如果有重命名对象的需求,一般能想到的就是重新上传改名之后的对象,然后从存储桶中将原名对象删除。很明显,这种方式好比大炮打蚊子,目的达到了,累得一身汗,要是本地没有备份,还得先下载,费时费力费钱。特别是当待处理的对象的数量相当庞大的时候,如果不想持续加班一个月,那就要琢磨琢磨另辟蹊径才行。 能不能将存储桶挂载到本地,然后用本地shell命令操作其中的对象呢?值得一试! 挂载 使用rclone、s3fs-fuse、goofys等工具挂载...

  Awp8G9E5LYte   2023年11月02日   107   0   0 云计算

打包工具选型 在ASP.NETMVC时代,我们常使用BundleCollection设置需要打包压缩的js和css文件,运行时框架会自动处理打包压缩过程并将最终结果传入响应。 ASP.NETCore开始,不再提供内置的打包压缩组件,官方推荐WebOptimizer替代使用。 上述两者都是在运行时实时处理,应该至少在系统初始化时会占用一定的资源。 时间来到.NET大一统时代,截止目前(.NET7),我们仍然只能寻求外部组件的帮助。有一个编译期生成预期文件的组件BuildBundlerMinifier,nuget安装后进行简单的JSON配置即可使用,但遗憾的是,它不支持压缩包含ES6语法的js,会...

  Awp8G9E5LYte   2023年11月02日   73   0   0 .NET

笔者个人理解:gitlab-runner安装后就是一个监听状态的runner,而通过gitlab-runnerregister注册的“实例”其实只是预定义的配置节,当消息抵达后,gitlab-runner根据消息内容选择相应的配置节启动执行线程。为了方便阐述和理解,本文也将每个配置节/执行线程称为runner实例。 runnerexecutor runner实例的执行环境,一般用的较多的是shell和docker,这两者的区别无需赘述。 让人困惑的是其它一些executor:比如Docker-SSH和Docker-SSH+machine,还好从GitLabRunner10.0开始,这两者就被废...

  Awp8G9E5LYte   2023年11月01日   122   0   0 敏捷开发

在项目开发和部署过程中,我们常常需要一套私有仓库,比如CodeRepository、PackageRepository,DockerRegistry等。 CodeRepository:在github或gitlab或gitee等平台上创建私有项目;或搭建本地代码服务器,一般常用gitlab开源版本搭建。 PackageRegistry:以nuget为例,官方nuget.org是不提供私有空间的,因此我们常用baget(只支持nuget)、nexus(支持多种类型)搭建私有PackageRegistry。 DockerRegistry:私有Docker镜像仓库,常用于本地构建、远程部署场景,可使...

  Awp8G9E5LYte   2023年11月01日   136   0   0 代码与软件发布
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~