站长信息
jeffery.xu
jeffery.xu

软件工程师

欢迎访问我的个人笔记网站!我是一名热爱技术的开发者,专注于Web开发和技术分享。

811495111@qq.com
18521510875
筛选

个人笔记

MVP模式介绍
java学习

MVP的英文全称为Model View Presenter,它是从经典的MVC模式演变而来的。它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。MVP从MVC演变而来,通过表示器将视图与模型巧妙地分开。在该模式中,视图通常由表示器初始化,它负责呈现用户界面(UI),并接收用户所发出的命令,但不对用户的输入做任何逻辑处理,而仅仅是将用户输入转发给表示器。通常每一个视图对应一个表示器,但是也可能一个拥有较复杂业务逻辑的视图会对应多个表示器,每个表示器完成该视图的一部分业务处理工作,降低了单个表示器的复杂程度;一个表示器也能被多个有着相同业务需求的视图复用,增加单个表示器的复用度。表示器包含大多数表示逻辑,用以处理视图,与模型交互以获取或更新数据等。模型描述了系统的处理逻辑,但对于表示器和视图一无所知。

1.MVP模式的优点

MVP模式的优点体现在以下三个方面。

(1)View与Model完全隔离。Model和View之间具有良好解耦性的设计,这就意味着,如果Model或View中的一方发生变化,只要交互接口不发生变化,另一方就无须对上述变化做出相应的变化,这使得Model层的业务逻辑具有很好的灵活性和可重用性。

(2)Presenter与View的具体实现技术无关。也就是说,采用诸如Windows表单、WPF(Windows Presentation Foundation)框架、Web表单等用户界面构建技术中的任意一种来实现View层,都无须改变系统的其他部分。甚至为了使B/S、C/S部署架构能够被同时支持,应用程序可以用同一个Model层适配多种技术构建的View层。

(3)可以进行View的模拟测试。由于View和Model之间的紧耦合,在Model和View同时开发完成前对其中一方进行测试是不可能的。出于同样的原因,对View或Model进行单元测试很困难。MVP模式解决了上述所有的问题。在MVP模式中,View和Model之间没有直接依赖,开发者能够借助模拟对象注入测试两者中的任意一方。

2.MVP模式与MVC模式的区别

MVP模式示意图如图1-1所示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Controller来进行的,所有的交互都发生在Controller内部;而在MVC中View会直接从Model中读取数据,而不是通过Controller。在MVC中,View是可以直接访问Model的。View中会包含Model信息,不可避免地还要包括一些业务逻辑。在MVC模式中,更关注Model的不变,而同时有多个对Model的不同显示及View。所以在MVC模式中,Model不依赖于View,但View是依赖于Model的。不仅如此,因为有一些业务逻辑在View中实现,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的,代码复用率低。

图1-1 MVP模式

Boolean boolean的区别
java学习

Boolean 是 Java 的包装类,boolean 是基本类型。


boolean:基本类型,占 1 位,默认值是 false,不能为 null。
Boolean:包装类,可以为 null,有更多方法(如 toString()、parseBoolean()),常用于对象、泛型、集合等场景。
举例:

boolean a = false;      // 只能 true/false
Boolean b = null;       // 可以为 null

node装完 npm没法运行
java学习

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass

注意:放宽执行策略有安全风险,仅在信任的环境下操作。

npm --install 出错
java学习

一定要在package.json下运行

 

配置Spring Boot 调试
java学习

在 IntelliJ IDEA 中配置调试 Spring Boot 项目步骤如下:


打开项目,点击右上角的“运行/调试配置”按钮(或菜单栏 Run -> Edit Configurations)。
点击左上角“+”,选择“Spring Boot”或“Application”。
填写主类(如 com.mobizone.kb.YourApplication),确保 VM options、Program arguments、Working directory 等参数正确。
点击“确定”保存配置。
点击绿色虫子图标(Debug)启动调试模式。
这样就可以在代码中设置断点,调试 Spring Boot 项目了。

第五章-僰人古都
java学习

古都深处:走古都入口神龛旁的路,操作机关关闭失心炮→古都深处神龛旁,红色的谜题门涉及到结局,先不管→在古都深处上层操作机关,过桥见到熊猫→开黄色门对话说书人,然后跳下去

封印之地:跳下来后,沿着骨架往下走,对话何有哉→腐败毒池两侧收集两块太阳神鸟碎片→走上腐败毒池正前方的长阶梯,使用两块太阳神鸟碎片开门→封印之地

好结局前置条件:在封印之地神龛前,先别进门打最终BOSS,建议备份存档,接下来要打全结局了。没有全程跟着我攻略走的,请先看好结局前置条件

命里无时结局:回到古都深处神龛,谜题门回答正确答案:大梦已寤,开门见到老船夫→到封印之地打玄阳子→进入真理之门“真实之境”

如真似梦结局:换通关前存档→在古都深处神龛,谜题门故意答错选择“再入轮回”,被传送到新区域“蜀神居所”→打素衣侠女(执念心魔)→走到头到花台上,献上轮回之环连接因果,得到【轮回之环·重生】→到封印之地打玄阳子→进入真理之门“幻梦之境”

第四章-破败佛源镇
游戏攻略

丹青苑:回真武祭坛附近松竹幽径的洞口,和说书人对话,传送到第四章的丹青苑→走出房间,对话方瑶、何有哉、陶青、吴刚→丹青苑侧边小路下来,亭子里见到熊猫→丹青苑中间对话说书人,答应帮忙(如果拒绝,会在击败僰人巫祝后触发“僰人承继者”结局)→走出丹青苑,神龛旁对话安文思→佛源镇

蜀王祠:丹青苑→佛源镇→罗家大院打梦魇心魔→进着火的蜀王祠激活神龛

丹青侧院:蜀王祠二楼树桥出去→上山在崖边见到年大侠,他身旁是好兄弟谯麟的尸体→走隐形桥到丹青侧院→在神龛入梦刷新后,年大侠在丹青侧院的房子里独自哀伤→回到刚才年大侠坐的崖边,捡年大侠的武器、套装→下山去唐王行宫

唐王行宫:唐王行宫池塘见到僰人巫祝→开黄色先神之言门进入行宫菜园→安文思就躺在菜园神龛附近的坑里祈祷,这就是之前老船夫挖的那个坑→从行宫正门离开→行宫关隘见到僰人巫祝→打赤羽红岚→开红门来到秽柳滩,见到老船夫

僰人祀所(蜀王祠地下):秽柳滩→地宫入口→蜀王祠地下→打僰人巫祝

普元寺:蜀王祠→竹林小院→普元寺→打守护瑜夏的锦衣卫千户→普元寺神龛旁,之前见到垂髫小童的地方,对话方瑶→打碎附近的药罐,捡到垂髫小童、陶罐小童哥哥、老婆婆的遗物→回丹青苑,方瑶在门里躲着,但她不愿意开门→回普元寺,向瑜夏展示女主父亲的锦衣卫腰牌,或者红岚的同心锦囊→上三楼对话何有哉,给他看实验手记·残页三→燃灯洞窟

燃灯洞窟:对话玄阳子,保持沉默不要给他莹羽凿子(如果给他莹羽凿子,通关后会触发“饲药之人”结局,会被他做成药罐子)→深入洞窟,BOSS房门口对话素衣侠女→打真龙天子→僰人古都的古都入口→神龛旁对话玄阳子,旁边瑜夏和夫君躺在一起,入梦刷新后捡到明妃套装

衣冠冢:传送到真武山鸟人居所,过桥来到衣冠冢→打赵云

Transition vue3必须单一元素
java学习

Vue 3 的 <Transition> 组件要求被包裹的内容必须是单一根元素(一个 DOM 元素),否则会报 “Component inside <transition> renders non-element root node that cannot be animated.” 这个警告,并且内容区会不显示。</transition>
你在 Permission.vue 的 <template> 最外层加了一个 <div>,把所有内容包裹起来,这样就变成了单一根元素,警告消失,内容也能正常显示。
总结:
只要内容页 <template> 只有一个根元素,Vue 的 <Transition> 动画和内容渲染都能正常工作。
这是 Vue 官方推荐的写法,所有内容页都建议这样处理。

Vue的生命周期钩子方法
java学习

生命周期钩子方法是 Vue 组件在创建、挂载、更新和销毁等不同阶段自动调用的特殊函数。你可以在这些钩子里编写代码,实现如数据初始化、资源清理等操作。

常见生命周期钩子及其执行时机:


onMounted:组件挂载到页面后执行(适合请求数据、DOM操作)。
onBeforeMount:组件挂载前执行。
onUpdated:组件更新后执行。
onBeforeUpdate:组件更新前执行。
onUnmounted:组件卸载前执行(适合清理定时器、事件监听等)。
这些钩子只能在 setup() 或 <script setup> 语法中使用。

ping端口
编程技巧

 telnet 127.0.0.1 6379

telnet功能需要在控制面板,程序与功能中勾选出来,同IIS