IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    love 0
    leileiluoluo@leileiluoluo.com (磊磊落落)
    发表于
    2023-12-20 08:00:00

    給太太的信

    執迷一時人之常理,執迷一世就是罪過。Zhener,你是世界上最好的太太,我心靜下來的時候,最心疼你。來咱們家,儘讓你受苦了,恰遇上我狀態最差的幾年,把你傷害的身心俱疲。想想以前的你多愛笑啊。 ...继续阅读 (145)


    love 0
    白宦成
    发表于
    2023-12-20 02:00:00

    如何自定义 Docked?

    我在之前的文章使用 Docked Rails CLI 简化 Rails 的开发中介绍了 Ruby on Rails 的 Docked 程序,并提供了一个我自己的定制版本。这里来和大家说一下怎么自定义 Docked 镜像,从而构建一个适合你自己的镜像。Fork Docked 项目At first ,你需要 Fork Rails 官方的项目https://github.com/rails/dockedFork 项目到你自己的名下后,你可以修改一下他的名字,改成适合你自己习惯的名字(比如我就改成 Runs 了,Docked 对我来说太容易打成 Docker 了)。修改 DockerfileDocked 最核心的其实就是 Dockerfile ,你可以修改你 Fork 来的项目,并在 Dockerfile 当中添加必要的依赖,引入新的资料等。比如,https://github.com/bestony/runs/commit/d930a5d6fc389cb6fa8e9f7c41947d01b000da95这个 Commit 就是为了在 Dockerfile 当中添加 PGSQL 的配置,以实现在使用rails new命令时,可以选用 PGSQL as DB Backend。修改 Ruby 版本可参考:https://github.com/bestony/runs/commit/31fabe5 ...继续阅读 (218)


    love 0
    obaby
    发表于
    2023-12-20 01:57:31

    青岛的冬

    早上被叫醒,说,下雪了,早点走吧,等会儿送宝儿上学路上肯定堵车,也不好走。其实那时候我已经快要醒了,穿上衣服爬起来,到窗边看了看,阳台的窗户上一层水珠,如果在老家的话,应该冻成冰花了。走到厨房的窗户边,往小区里面望去,白茫茫的一片,小广场上隐约能听到孩子的欢呼声。这是今年青岛的第二场雪,毫无预兆。当然,也是因为自己可能没看天气预报的原因。第一场雪就在前几天,在呼啸的大风中纷纷扰扰的下了一天,结果,第二天什么都没留下。连一点下雪的痕迹都没留下,只是出门走在路上的时候交通事故出现了好几起,仅此而已。早上送孩子上学的,依然有骑电动车的,不管是大人还是孩子包裹的严严实实的,只露出两只眼睛。周末的时候,照例给老太太打电话。那时候刚从项目回来,电话接通之后,寒暄不外乎还是那么几个话题,吃饭没,上班没,周日有没休息。我说刚从项目上回来的时候,老太太问,周日还上班,不休息啊?刚准备去吃饭,我答。“青岛雪下的大不大?”,她问。“还可以吧,地上没什么积雪”“村里的积雪挺厚的,路上厚厚的一层,我还寻思着,路上不好走,就别去上班了。”这种思想,几乎每次有点极端天气什么的,她都会提这个,下大雨,下大雪。她觉得这种天气不上班也没什么。实际情况是,哪里那么容易就在家呆着。“没事,路上没什么雪,该上班还得上啊。不上班怎么办?”往后也就不提这个话题了。老家的冬更难熬一些,小的时候特别害怕这种恶劣天气,不管是下雨还是 ...继续阅读 (45)


    love 0
    smallnest
    发表于
    2023-12-20 00:32:01

    “鲜有人了解的同步原语Phaser,和Barrier有啥区别?”

    Java中的Phaser是一个同步原语,它可以让多个线程在某个时刻同步执行。它和Barrier有点类似,但是它比Barrier更加灵活。举一个例子哈,比如足球迷特别喜欢的欧洲冠军联赛,它的赛制就分为多个阶段:欧洲冠军联赛由欧冠资格赛、欧冠附加赛和欧冠正赛三部分组成。欧冠资格赛,分为预赛轮(preliminary round)、第一轮资格赛(first qualifying round)、第二轮资格赛(second qualifying round)和第三轮资格赛(third qualifying round)。第三轮资格赛的优胜的10支球队进入欧冠附加赛,附加赛优胜的6支球队(冠军之路4队、联赛之路2队)将和26支自动晋级的队伍一起,参加欧冠小组赛。欧冠正赛分为小组赛、1/8决赛、1/4决赛、半决赛和决赛。所以欧冠联赛分成了多个阶段,每一个阶段,会有一些球队参加,等到下一阶段,淘汰了一部分球队,又会有新的球队加入,每个阶段的球队都会有变化。这种情况非常适合使用Phaser来模拟。Phaser和CyclicBarrier的功能非常的相似,都是应用于多个参与者多阶段处理问题的场景,每个阶段都有障碍点,在障碍点需要等待所有的参与者到齐后才能进入下一个阶段。但是Phaser比CyclicBarrier更加灵活,CyclicBarrier的参与者数量是固定的,所以初始化CyclicBarri ...继续阅读 (163)


    love 0
    诺多
    发表于
    2023-12-20 00:01:00

    Jellyseerr:一款支持Jellyfin/Emby/Plex的媒体库选片系统

    Jellyseerr是一款致力于管理用户媒体库请求的免费和开源的软件系统,它是Overseerr的分叉版本。由于原始的Overseerr团队没有更多的精力(目前仅支持Plex),并且Jellyfin/Emby的支持并未在他们的路线图中,因此一些等不及的开发者创建了这个项目,以期将Overseerr的经验带给Jellyfin和Emby社区。1️⃣ 功能特性Jellyseerr基本上包含了媒体库选片相关的所有功能特性,预计未来还将推出新特性,包括支持多服务器实例等功能。Jellyseerr实现了与Jellyfin/Emby/Plex的全面集成,允许通过这些平台进行用户身份认证和管理访问。支持多种类型的媒体,包括电影、电视剧以及混合媒体库。为了便于使用smtp,用户可以自行更改电子邮件地址。Jellyseerr能够一键导入所有的jellyfin/emby用户。可以轻松地与现有的媒体服务进行集成,如Sonarr和Radarr等,并且未来还会支持更多平台。此外,该应用提供Jellyfin/Emby/Plex媒体库扫描功能,可以方便地跟踪已存在的标题信息。Jellyseerr还拥有自定义的请求系统,用户可以通过友好易用的界面单独请求单个剧集或电影。对于权限管理,Jellyseerr提供了精细的设置。兼容多种通知工具,交互界面也对移动端进行了良好的适配(支持PWA应用)。2️⃣ 设置和展示1、登 ...继续阅读 (130)


    love 0
    me@mengke.me (Mengke)
    发表于
    2023-12-20 00:00:00

    WebGL 学习笔记(一)

    稍纵即逝的一年即将结束。今年我也顺应潮流,记录年终总结。过去,我对「年终总结」不屑一顾,认为人生就是不断前行,有欢笑有泪水,一切都将过去。年纪稍长,渐渐明白,一些事情漫不经心就可能被遗忘,需要人为地留下痕迹... ...继续阅读 (103)


    love 0
    小虾米
    发表于
    2023-12-19 19:16:09

    用 OIO 来进行 Socket 编程

    用 OIO 来进行 Socket 编程 我们回顾一下传统的 HTTP 服务器的原理: 创建一个ServerSocket,监听并绑定一个端口 一系列客户端来请求这个端口 服务器使用S ...继续阅读 (144)


    love 0
    ChenSoul
    发表于
    2023-12-19 19:10:00

    2023-12-19|Spring Security OAuth2 配置JWT、Github Actions配置代码扫描

    Today I Learned. 今天分享内容:Spring Security OAuth2 配置JWT、Github Actions配置代码扫描,另外,修改了 [spring-oauth2-tutorial](https://github.com/chensoul/spring-oauth2-tutorial/tree/main/legacy) 仓库,支持授权认证中心的多种配置方式(jdbc、内 … ...继续阅读 (126)


    love 0
    emanjusaka
    发表于
    2023-12-19 16:41:23

    浅析 ArrayList

    by emanjusaka fromhttps://www.emanjusaka.top/2023/12/java-arrayList彼岸花开可奈何本文欢迎分享与聚合,全文转载请留下原文地址。ArrayList是一个使用List接口实现的Java类。顾名思义,Java ArrayList提供了动态数组的功能,其中数组的大小不是固定的。它实现了所有可选的列表操作,并允许所有元素,包括null。ArrayList继承于AbstractList,实现了List,RandomAccess,Cloneable,java.io.Serializable这些接口。public class ArrayListextends AbstractListimplements List, RandomAccess, Cloneable, java.io.Serializable{ }​​ArrayList 中的构造函数// 默认初始化容量 private static final int DEFAULT_CAPACITY = 10; // 用于空实例的共享空数组实例。 private static final Object[] EMPTY_ELEMENTDATA = {}; // 用于默认大小的空实例的共享空数组实例。我们将其与EMPTY_ELEMENTDATA区别开来,以了解添加第一个元素时要膨胀 ...继续阅读 (138)


    love 0
    Teacher Du
    发表于
    2023-12-19 16:37:31

    Nginx 的 WAF 规则 LuaJIT 中危险版

    前段时间杜老师发表了一篇《自建 CDN 服务器思路》其中介绍南墙 Web 应用防火墙,有些小伙伴们对其名字很感兴趣,而杜老师注意到了它的防护规则,感觉非常实用,顺手整理了下,分享给需要的小伙伴们。此篇为中危险防护规则!机器人攻击防护过滤阶段:请求阶段规则描述:通过生成滑动旋转验证码来拦截机器人攻击,如漏洞扫描、网络爬虫、CC攻击等自动化攻击行为,Token有效期30分钟。规则内容:1234567891011121314151617181920212223localsh=ngx.shared.ipCachelocalrobotIp='rb:'.. waf.iplocalc, f=sh:get(robotIp)-- 如果是静态页面且没有进行滑动旋转验证码验证则返回ifnot(waf.isQueryStringorwaf.reqContentLength>0)andf~=2thenreturnfalseendifnotcthensh:set(robotIp,1,60,1)-- 设置1分钟也就是60秒访问计数时间段elseif f==2thenreturnwaf.checkRobot(waf)-- 启动机器人滑动旋转验证码验证endsh:incr(robotIp,1)if c+1>=360thensh:set(robotIp, c+1,1800,2)-- 达到了60秒内 ...继续阅读 (147)


    love 0
    诺多
    发表于
    2023-12-19 16:03:31

    一款小米摄像头视频文件合并工具,支持在NAS中运行!

    使用过小米摄像头的朋友应该知道,小米摄像头保存到NAS的视频都是一分钟一个的小文件,而且保存在NAS上的视频也不支持在APP中回看,相当的不方便,你只能到NAS中一个一个的点着播放。那么这个小工具就是来解决这个问题的,它支持将这些小文件合并一个大的视频文件,这样观看起来就方便多了。1️⃣ 工具简介这款工具是开源大佬hslr-s基于另一位大神开发的 Windows脚本,移植成 Golang 的版本,使用ffmpeg来实现视频的合并转存,将多个一分钟一个的小视频合并为1小时一个的视频,并按天保存在原视频文件所在的目录,合并后的视频文件为.mov格式,下面合并前后的对比图:2️⃣ 使用方法工具本身支持自行使用源码编译并使用命令执行,但需要自行搭建ffmpeg和Golang环境,对于大多数看到代码就头疼的朋友来说还是有点挑战性的,那么作者也考虑到了这点,提供了一个Docker镜像,解决了各种环境问题,直接在NAS中跑一个容器就可以了。笔者参照作者的指导文档,准备了Docker和Docker Compose两种部署方式,任选一种即可。1、Docker方式docker run --rm -it --restart=no \ -v xiaomi/to/camera:/app/video \ -e "DELETE_SUCCESS=true" \ -e "MAX_MERGE=100" \ --nam ...继续阅读 (125)


    love 0
    chuck
    发表于
    2023-12-19 12:01:22

    JavaScript 文件优化指南

    本文将探讨实用的 JavaScript 文件优化技术、如何处理与 JavaScript 文件相关的性能问题以及帮助优化过程的工具。你将获得提升web应用程序速度的相关知识,从而为你的用户提供无缝体验。JavaScript 文件是web应用程序的重要组成部分,但网站速度和用户体验对网站的成功至关重要。因此,优化 JavaScript 文件以确保无缝体验至关重要。优化 JavaScript 文件可以解决渲染阻塞、页面加载时间、文件大小等问题。了解JavaScript优化JavaScript 优化是提高 JavaScript 性能的过程。要了解 JavaScript 优化的好处,我们首先要了解与 JavaScript 相关的问题。其中包括:脚本执行。包含阻塞代码的 JavaScript 文件会延迟页面渲染。脚本执行会阻止其他内容的加载,从而导致糟糕的用户体验。文件大小。大型 JavaScript 文件的下载时间较长,会影响页面加载时间。代码复杂、效率低。优化不佳的 JavaScript 代码(如过多的循环、冗余的计算或低效的算法)会导致性能受阻。优化 JavaScript 文件的好处多多。JavaScript 优化有助于提高web应用程序的响应速度和交互性,提供更满意的用户体验和更好的性能。它包括更快的表单提交、动态内容更新和流畅的动画。通过帮助减少 JavaScript 文件的大小并优 ...继续阅读 (207)


    love 0
    Kimi
    发表于
    2023-12-19 11:44:03

    ubuntu 升级 nodejs

    打开终端,并使用以下命令更新系统软件包列表sudo apt update安装Node.js的包管理器npm:sudo apt install npm sudo apt upgrade nodejs使用以下命令安装Node.js的版本管理工具nsudo npm install -g n使用n命令安装最新版本的Node.jssudo n latest验证Node.js是否成功安装node -v ...继续阅读 (141)


    love 0
    oldj\'s blog
    发表于
    2023-12-19 11:09:00

    增加新的柜员后会发生什么?

    看到一篇有趣的短文《增加新的柜员后会发生什么?》,讲的是排队论。银行柜员问题文章中讨论了这样的一个问题:假设一家小银行只有一名柜员,每位顾客平均需要 10 分钟的服务时间,每小时预计有 5.8 位顾客到达,那么预计每位顾客的等待时间是多少?乍一看之下,每小时有 60 分钟,但只有 5.8 位顾客到达,即平均每 10.3 分钟才有一位新顾客到达,同时每位顾客平均只需要 10 分钟的服务时间,似乎一位柜员就足够服务好这些顾客了,每位顾客都不用等待或者不会等待太久?但事情显然不会这么简单,假设顾客到达的时间和所需的服务时长都是随机的,那么每位顾客在得到柜员服务之前,平均需要等待近 5 小时之久!为什么会这样?其实稍加思考,我们就能发现端倪,因为那个 10 分钟只是平均时间,但每位顾客所需的实际时间差异可能会很大,有人可能只需要一两分钟,有人则可能会需要几十分钟甚至几小时,而一旦遇到一位需要长时间服务的顾客,所有后来的顾客都只能排队等待。同时,顾客的到达时间间隔也不是严格的 10.3 分钟,有时可能几十分钟甚至几个小时都没人来,有时则一下子连着来了好几位顾客。那么,如果增加一位柜员会怎么样呢?你或许会以为,增加了一位柜员后服务处理能力加倍,那么顾客的平均等待时间也应该对应地减半,平均每位顾客大概只需要等待两个多小时吧?但事实上,增加一位柜员后,顾客的平均等待时间会一下子下降到 3 分钟,仅 ...继续阅读 (188)


    love 0
    caimouse
    发表于
    2023-12-19 10:28:23

    鸿蒙OS应用开发之多行文本输入

    但是也有一些例外,比如需要用户备注一段说明自己的简历,那么使用一行文本,要把情况写出来,就有点强人所难,毕竟不是所有人都能这么好的总结能力,因此要使用多行的文本组件,这样让所有用户适应。因为多行输入之后,偶尔要移动光标到某一个位置进行添加或修改,如果没有光标的定位功能,就会比较让人作急,要么全部删除再写,这是多么浪费时间。只要你仔细地查看一下,就会发现跟单行文本输入框的定义是一样的,所以前面学习的内容是完全适合这里的,按样子使用就可以了,特别事件响应函数都是一样的。,这个跟单行组件是一样的。 ...继续阅读 (193)


    love 0
    pachinko
    发表于
    2023-12-19 10:00:00

    「ドラゴンが降りる: 幻想的な冒険の始まり」

    「ドラゴンが降りる: 幻想的な冒険の始まり」『ドラゴンが降りる』は、待望の新作ゲームとして登場し、その魅力に心から満足しています。本作は、ドラゴンの存在が物語を彩るファンタジー世界を舞台にしたアクションRPGで、開発者が注力したポイントがいくつか際立っています。まず、ゲームの本来の意図に焦点を当てると、『ドラゴンが降りる』はプレイヤーに没入感と冒険の興奮を提供することを明確にしています。物語の背後にある深いストーリーテリングは、プレイヤーを引き込み、ゲームの進行において感情移入を促進します。キャラクターの発展や出会う仲間たちとの絆が、プレイヤーに深い印象を残す要素となっています。ゲームの特徴として挙げられるのは、見事なグラフィックと独創的なデザインです。美しく描かれたキャラクターや広がる風景は、まさにファンタジーの世界に飛び込んだような感覚を味わわせてくれます。特に、ドラゴンたちのデザインは驚くほどリアルで迫力があり、戦闘シーンでの臨場感は非常に高いです。ゲームプレイにおいては、『ドラゴンが降りる』は戦略的なアクションと多彩なスキルの組み合わせが求められるため、プレイヤーに緊張感と興奮をもたらします。敵の弱点を見極めつつ、戦術を練りながら戦うことが魅力の一端です。また、多彩な武器やアイテムの存在が戦略の幅を広げ、常に新しいチャレンジが待っています。プレイヤーにとって役立つヒントとコ ...继续阅读 (107)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    如何加速git clone下载速度,为你的git添加代理加速访问

    我们在使用git工具进行clone是发现下载速度特别慢,就算我们开启了魔法都会很慢,其实这个是因为我们开启的代理只是对浏览器生效了(你会发现在浏览器里面直接访问GitHub下载就会很快速)。这个时候就需要对git也配置代理就可以加快访问了。准备代理:首先你已经具备了,魔法就得自己去寻找了,这里就不做提供。查看端口:如果你还是使用着clash,可以直接查看,例如下面,端口就是7890,后面需要用到。配置设置HTTP代理1git config --global http.proxy http://127.0.0.1:7890上面127.0.0.1表示的是本地回环地址,而我们需要改动的就是这个地址冒号后面的端口号,将端口号改成自己的即可。设置成功了你就可以发现在.gitconfig文件中添加了如下的配置,这个文件在用户文件夹里面就可以看到。12[http]proxy = http://127.0.0.1:7890测试最后再次进行clone的时候就会发现快很多了。 ...继续阅读 (150)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    解决JetBrains产品无法卸载问题: xxx uninstall hasn‘t detected folder

    今天在卸载软件时发现Clion无法卸载,卸载时提示Clion uninstall hasn't detected folder...,根据检查发现这是因为卸载时没有检测到Clion文件夹,导致卸载失败。修复经过查询相关资料发现该问题可以直接解决。使用管理员权限打开powershell命令找到卸载的软件所在的目录,你可以通过桌面软件快捷图标鼠标右键点击打开文件所在位置(I)查看该程序所有文件,例如我的文件路径是C:\software\Program Files\JetBrains\WebStorm 2022.1.3\bin,复制该路径。在powershell中输入如下命令12cd'刚刚复制的文件路径'# 例如我的是 cd 'C:\software\Program Files\JetBrains\WebStorm 2022.1.3\bin'进入上述文件路径后,输入如下命令1New-Item -Path'IdeaWin64.dll'-ItemType File最后正常点击Uninstall.exe程序进行卸载即可。参考自卸载pycharm时遇到问题:pycharm uninstall hasn‘t detected folder_pycharm卸载不了 ...继续阅读 (175)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    实现部署自己的Meting-Api服务

    已经好久没有更新博客了,最近进入博客发现音乐服务似乎不能访问了,然后查看了其他使用了vercel部署的网站都不能访问了,但是开启了代理又可以,所以没办法,只能慢慢看情况修复了。部署自己的Meting-Api服务,最重要的就是需要有一台服务器了,因为原来的vercel已经没有办法访问了。部署首先我们的服务器需要有docker,这个部分的内容可以自行百度,十分的简单,不过对于有服务器的人来说这也应该不是什么难事。运行下面的命令下载 Meting-API 镜像:1docker pull intemd/meting-api:latest然后运行 Meting-API :1docker run -d --name meting -p 3000:3000 intemd/meting-api:latest到这里其实已经完成了基本的操作。如果需要使用域名访问,可以通过宝塔面板添加网站,解析好,点击设置,完成反向代理和SSL证书的设置。如果不想申请证书,可以直接先在宝塔面板里面申请后点击反向代理,在目标url填上http://127.0.0.1:3000,代理名称随便,最后点击保存即可。最后通过访问你的域名+'/api'即可访问发现许多的歌曲,此时表示部署成功,至于具体的前端服务可以查看GitHub - metowolf/MetingJS: :cake: A powerful plugin conn ...继续阅读 (159)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    利用ChatGPT+IDEA+PlantUML快速生产顺序图、活动图等

    最近需要完成一个课内的作业,由于各种事情比较多,加上最近爆火的ChatGPT,就想着怎么可以实现利用ChatGPT帮我完成作业,但是ChatGPT3.5只支持文本交互,所以在画图上还是有缺陷。本来打算自己设计顺序图、活动图啥的了,问ChatGPT发现似乎有这种生成各种UML图的软件,于是就发现了利用ChaGPT+IDEA+PlantUML可以快速完成各种图形的绘制。软件配置首先你需要有一个ChatGPT账号,都过去这么久了,至于怎么获取就需要自行学习了。当然你也可以使用别人搭建好的。作为一个Java开发人员,IDEA这个软件也就都有了。下载插件,在IDEA中下载PlantUML插件(支持多种图形的生成,包括顺序图,类图、活动图、用例图等),如何下载呢,点击右上角设计的按钮,点击Plugins按钮,在Marketplace搜索即可,下载好了需要重启下软件。使用获取设计首先,你肯定有一个设计方案,告诉ChatGPT,他会给出设计的UML代码。它可能一开始不会给出,但是你可以继续提问。使用复制ChatGPT回答的顺序图代码,例如下面的内容12345678910@startumltitle 开始游戏顺序图用户 -> 游戏: 选择关卡游戏 -> 游戏: 加载地图游戏 -> 用户: 显示初始位置用户 -> 游戏: 点击指令按钮游戏 -> 用户: 进入指令编辑界面@enduml打开IDEA软件, ...继续阅读 (121)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    Hexo博客获取指定数量的友情链接,脱离友链朋友圈的约束

    最近比较忙,所以都是更新学习的一些东西或者就是直接没有更新博客,这两天看了一下博客,发现博客好多功能都受到了约束,必须先实现什么其他功能才能实现当前这个功能,刚好看到随机三个友情链接目前是通过友链朋友圈实现的,每次都需要抓取。看了下目前随机友链的功能,想起来hexo内置了过滤器可以实现。实现这个实现是在butterfly主题基础上进行实现,其他主题参照即可。新建themes/butterfly/scripts/helpers/random.js文件。1234567891011121314151617181920hexo.extend.filter.register('after_render:html',function(data) {constflinks = []hexo.locals.get('data').link.map(function(list) {list.link_list.map(function(flink) {flinks.push(flink)})})data +=`let flinks=${JSON.stringify(flinks)}// 自己进行选择,可要可不要,本主题写了其他函数需要使用function getRandomFlink(num ...继续阅读 (171)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    设计模式之工厂模式,快速入门

    需求:设计一个咖啡店点餐系统。设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。具体类的设计如下:在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;所以说,工厂模式最大的优点就是:解耦。在本教程中会介绍三种工厂的使用简单工厂模式(不属于GOF的23种经典设计模式)工厂方法模式抽象工厂模式简单工厂模式简单工厂不是一种设计模式,反而比较像是一种编程习惯。结构简单工厂包含如下角色:抽象产品 :定义了产品的规范,描述了产品的主要特性和功能。具体产品 :实现或者继承抽象产品的子类具体工厂 :提供了创建产品的方法,调用者通过该方法来获取产品。实现现在使用简单工厂对上面案例进行改进,类图如下:工厂类代码如下:123456789101112publicclassSimpleCoffeeFactory{publicCoffeecreateCoffee(String t ...继续阅读 (159)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    设计模式之单例模式,看这篇就懂了

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例模式的结构单例模式的主要有以下角色:单例类。只能创建一个实例的类访问类。使用单例类单例模式的实现单例设计模式分类两种:​ 饿汉式:类加载就会导致该单实例对象被创建​ 懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建饿汉式-方式1(静态变量方式)12345678910111213141516/*** 饿汉式* 静态变量创建类的对象*/publicclassSingleton{//私有构造方法privateSingleton(){}//在成员位置创建该类的对象privatestaticSingletoninstance=newSingleton();//对外提供静态方法获取该对象publicstaticSingletongetInstance(){returninstance;}}说明:​ 该方式在成员位置声明Singleton类型的静态变量,并创建Singleton类的 ...继续阅读 (148)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    ChatGPT技术为我们的生活带来的变化

    随着人工智能技术的不断发展,ChatGPT技术在近年来迅速崛起,为我们的生活带来了许多变化。ChatGPT能够对话和理解自然语言,可以与人类进行自然流畅的交流,为我们的生活带来了便利和改变。变化最显著的变化之一是ChatGPT技术的应用于客服领域。通过ChatGPT技术,企业可以让机器人客服更加智能地处理客户问题,从而增强客户满意度和忠诚度。相较于传统客服方式,ChatGPT技术可以快速、准确地回答客户的问题,并且可以随时随地提供服务。这使得企业能够更好地理解客户需求,并及时调整更改,为客户提供更好的服务。使用领域ChatGPT技术还应用于智能家居控制领域。通过嵌入ChatGPT技术的语音助手,用户可以使用自然语言对智能家居设备进行控制和管理,无需手动操控。用户可以用手机或语音传感器进行操作,轻轻松松完成一些简单的家居设备操作,如开关灯、调节空调温度等。这种方式不仅方便了用户的生活,还可以提高家庭安全性。另外,ChatGPT技术也为教育领域带来了变化。ChatGPT技术可以提供在线学习,通过语言交流,解决学生遇到的难题,同时提高学生的学习效率。这使得学习过程更加个性化,因为它可以根据学生的不同需求进行调整和帮助。这种教学模式的出现也为远程教育提供了可能,无论学生身处何地,只要有网络,就可以受到优质的教育资源和服务。存在问题然而,使用ChatGPT技术也存在一些问题。例如,它可能无法 ...继续阅读 (172)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    搭建自己的ChatGPT网站,让你的使用更加便捷

    最近ChatGPT的热度依旧不减,其实这个在1月的时候就已经有接触了,当时不以为意并且当时注册起来都还挺好搞的,但是可惜没有进行注册,加上现在由于各方面的原因,注册使用都比较麻烦,所以使用就比较麻烦(需要魔法)。最近刚好朋友有账号,但是官网有时候进不了,这两天刚好发现可以自己搭建,结合Vercel还是挺好用的。前提首先,你必须得有一个账号,因为还是使用正版的ChatGPT,所以需要自己想办法搞到并且获取对应的Key(具体可以百度下,还是非常简单的),本文章只是为了解决有时候不方便的时候需要使用ChatGPT而写。开始我们需要使用写好的项目,部署到Vercel上,项目地址如下链接。引用站外地址ChatGPT-Next-WebJayHrn如果没有注册过Vercel的,可以进行注册,注册成功后,可以按照如下进行操作。然后点击import按钮,如果你没有绑定GitHub仓库,可能需要先按照提示进行绑定操作。点击Environment Variables然后添加两个环境变量变量名值是否必须解释CODE自定义否用于配置是否需要输入密码才可使用服务OPENAI_API_KEYopenai官网获取是用于调用api服务最后点击Deploy按钮等待完成即可。由于Vercel被限制了,用免费提供的域名可能无法进行访问,需要将自己的域名解析下即可。使用配置好,你将可以看到如下界面对于第一次使用设置了密码的 ...继续阅读 (153)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    软件设计模式入门,教你学会六个设计原则

    在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。开闭原则对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。下面以搜狗输入法的皮肤为例介绍开闭原则的应用。【例】搜狗输入法的皮肤设计。分析:搜狗输入法的皮肤是输入法背景图片、窗口颜色和声音等元素的组合。用户可以根据自己的喜爱更换自己的输入法的皮肤,也可以从网上下载新的皮肤。这些皮肤有共同的特点,可以为其定义一个抽象类(AbstractSkin),而每个具体的皮肤(DefaultSpecificSkin和HeimaSpecificSkin)是其子类。用户窗体可以根据需要选择或者增加新的主题,而不需要修改原代码,所以它是满足开闭原则的。里氏代换原则里氏代换原则是面向对象设计的基本原则之一。里氏代换原则:任何基类可以出现的地方,子类一定可以出现。通俗理解:子类可以扩展父类的功能,但不能改变父类原有的 ...继续阅读 (149)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    设计模式基础入门介绍

    “设计模式”最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。直到1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《设计模式:可复用面向对象软件的基础》一书,在此书中收录了 23 个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。这 4 位作者在软件开发领域里也以他们的“四人组”(Gang of Four,GoF)著称。软件设计模式的概念软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性 ...继续阅读 (186)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    AES对称加密算法对经纬度信息进行加密

    加密算法在生活中有很多的应用,以下时一些常用的使用场景。网络安全:在互联网上,加密算法被广泛应用于保护网络通信的安全,比如HTTPS协议和SSL/TLS加密。数据库安全:对于一些敏感数据,比如用户密码、信用卡号等,需要使用加密算法进行存储和传输,以防止被非法获取。身份验证:在身份验证中,加密算法可以用于生成和验证数字签名,以确保身份验证的真实性和完整性。数字版权保护:数字版权保护也是加密算法的一个重要应用领域,比如数字音乐、电影、软件等。最近在做一个东西时需要简单的对经纬度信息进行加密,刚好了解了下AES加密算法。介绍AES(Advanced Encryption Standard)是一种常用的对称加密算法。它是由比利时密码学家Joan Daemen和Vincent Rijmen设计的,被选为美国联邦政府采用的新标准加密算法,可用于保护敏感数据的机密性,是当前被广泛应用的加密标准之一。AES算法有三种不同的加密密钥长度:128位、192位和256位。也就是说,它能够以128位、192位和256位三种密钥长度来生成密钥。其加密步骤如下:明文分组:将明文分成固定长度(16字节),不足16字节的使用填充算法处理。密钥扩展:根据密钥长度不同,执行10/12/14次轮密钥扩展,生成轮密钥。轮加密:每轮将明文进行逐字节替换、逐字节位移和逐列运算,由密钥扩展算法得到的轮密钥作为每轮运算的密钥。输 ...继续阅读 (149)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    修复手机端页面,字体显示的大小与css指定不一致(部分字体不一致等)

    最近在给自己的博客重新整理css,以及查看一些出现的问题,就发现了一个很严重的问题(我感觉),大致问题就是在手机端查看代码时,代码栏会出现字体突然变大的问题,这个问题其实早就发现了,但是没有仔细去搞过,刚好这个去找了下怎么解决。发现其实这个问题出现的原因也很简单,因为我在更换博客样式的时候,部分的css是直接抛弃了的所以在后续的过程中,也没有仔细研究原来的部分样式,也就出现了如下的样式的问题。解决在查阅百度之后,发现加上如下的样式即可,在themes/butterfly/source/css/_global/index.styl文件中加入123html{text-size-adjust:100%}当然,你也可以在自定义css中加入如下样式123html{-webkit-text-size-adjust:100%;}其实如果使用的是butterfly主题原本是使用了这样的一个样式的,在themes/butterfly/source/css/_third-party/normalize.min.css文件中,但是我在修改样式的时候,就直接将这个样式抛弃了,所以导致出现了这些问题,不过具体是怎么导致的也不清楚,待我学习之后再说吧,嘻嘻 ...继续阅读 (197)


    love 0
    JayHrn
    发表于
    2023-12-19 09:35:28

    一场落雪 、白了眉眼 、醉了人间

    我们无法判断一个瞬间的价值,直到它成为回忆这世上有两个我 一个沉默不语成熟稳重 一个叽叽喳喳幼稚至极 我是说在外人面前我会隐藏情绪 保持成熟 但在你这里 我只想和你分享我的日常 只和你碎碎念.事在人为,不是无缘,是不愿,有缘躲不过,无缘碰不到,缘起则聚,缘尽则散,随缘而至一点相思一点泪,点点相思红尘泪。一缕思念一颗豆,颗颗红豆束卿念。追月赶风莫停留,平芜尽处是春山因为她生来就是公主,每个女孩子都是公主,在属于自己的王子那里永远是最美丽的公主脚步丈量不到的地方,文字可以一场落雪 、白了眉眼 、醉了人间。明明自己过的不尽如意,却又见不得人间疾苦别人对我万般好 我都未曾动心 唯独你只要咧嘴一笑 我心里便开满了花 或许你只要站在那里 都已经赢了别人风吹哪页读哪页,哪页难懂撕哪页葡萄藤上开不出百合花 ,找不出答案的时候,就先找找自己贤妻扶我青云志,我还贤妻万两金我不想成为一个悲观的人 但我又是一个容易共情的人 我看到电影里的好人 永远得不到好报 我会悲愤 我见到路上拾荒的老人 又或是流浪乞讨的小狗 我会不由得想哭 感慨且同情我的心情会因为一些文字 一些言语 一些举动而大起大落 我永远无法忽视别人的感受 共情是痛苦的 世上所能看到的痛苦 我都控制不住的放在心里咀嚼 那种无能为力的感觉 每次都勒得我要窒息很奇怪 生活中我一直认为自己是个冷漠不讨喜的人 可却总为一些不相干的事物感到难 我不理解 为 ...继续阅读 (118)

上一页 435/4404 下一页
沪ICP备19023445号-2号
友情链接