- 博客(178)
- 收藏
- 关注
原创 在nodejs中使用Java方法
JSON-RPC 2.0是一种轻量级、无状态的远程过程调用(RPC)协议,使用JSON作为数据交换格式。表1 请求对象字段名类型必填说明jsonrpcstring是固定为 "2.0"methodstring是方法名params否参数id否请求标识符代码10 请求对象示例"id": 1表2 响应对象字段名类型必填说明jsonrpcstring是固定为 "2.0"resultany否结果error错误对象否错误信息id是。
2025-08-09 13:09:16
274
原创 x86汇编语言笔记
假设我们修改的是从右开始的第 位( 算第1位),即。在表示有符号整数时,MSB用来表示符号,0表示正数,1表示负数。考虑到计算机中实际使用的整数都属于 环,其零元是 的倍数(包括0),因此 也是 的加法逆元。我们用 表示 按位取反,显然 ,因此 的补码就是。依次压栈EAX/ECX/EDX/EBX/ESP(原值)/EBP/ESI/EDI。依次压栈AX/CX/DX/BX/SP(原值)/BP/SI/DI。add/sub/neg操作结果会影响ZF/CF/SF/OF/PF。
2025-08-09 01:28:23
491
原创 汇编语言和高级语言的差异
if (read_value() == 0x10) { // 读取、比较、条件判断内联。前6个整形参数通过RDI/RSI/RDX/RCX/R8/R9传递。leave等同于 mov esp, ebp;leave等同于mov rsp, rbp;dq .case0;[ebp-8] 本地变量2 (temp2)call do_something;mov rcx, 5;
2025-08-08 22:59:41
627
原创 GLSL 3.0简介
着色语言Shading Language用于调整渲染管线的GPU编程语言。GLSL 3.0顶点Vertex顶点是构成3D模型的基本单位,包含位置、法线、纹理坐标、颜色等属性。例如,一个立方体由8个顶点定义,每个顶点存储其在三维空间中的坐标。顶点着色器Vertex Shader从顶点属性(位置、法线等)生成中间数据的函数。顶点着色器控制几何形态(如动画、变形)。图元Primitive图元是由顶点组合成的基础几何形状,如点、线、三角形。例如,两个顶点构成一条线,三个顶点构成一个三角形面片。
2025-07-26 21:51:35
674
原创 Camera2API笔记
在CameraCaptureSession中,可以连续且不等待拍摄完成就发送新CaptureRequest。但要注意避免请求过多超出流水线容量,导致帧丢弃或延迟。可以通过CaptureCallback监听状态,控制请求频率。通过CameraCharacteristics的REQUEST_PIPELINE_MAX_DEPTH可以得到流水线容量。
2025-07-10 22:57:45
1235
原创 使用协程简化异步资源获取操作
Kotlin为这两种场景提供了解决方案:使用挂起函数简化一次性资源获取,使用流处理持续事件通知。关于事件流处理方案详见《将listener转换为事件流》一文。本文聚焦第一种场景:如何简化异步资源获取操作。
2025-07-08 23:36:08
765
原创 Java类加载器getResource行为简单分析
ClassLoader是一个抽象类,实际使用的是URLClassLoader。URLClassPath内部使用3个加载器:Loader、FileLoader和JarLoader,分别从远程(HTTP)、本地目录和jar包中加载资源。JarFile派生自ZipFile,加载jar文件项的代码是。如果没有目录,返回null。检查一番,原来是classpath中只有jar包,没有目录。因此当classpath中只有jar包时,时,JarLoader无法加载资源。,而如果classpath包含目录,
2025-07-04 22:30:12
675
原创 ViewModel是EventFlow-State映射
ViewModel负责组装界面状态State。引发State变换的原因有很多,比如用户点击某个按钮,一次网络请求受到应答,一次本地数据库查询返回结果等等。因此ViewModel是根据各种事件生成State的对象,换句话说,是一个从多个事件流到状态的映射。用图来表示就是用户交互 ───▶ 事件流 ───┤ ││ViewModel├───▶ UI 状态 ───▶ 渲染UI数据变更 ───▶ 数据流 ───┤ │。
2025-07-01 20:23:46
699
原创 将listener转换为事件流
考虑到listener/callback实际上是一种事件通知/触发机制,我们可以利用Kotlin中处理事件的工具:流,将listener/callback转换成事件流。从listener/callback到事件流,代码完成了三种范式转换。其次是从深层嵌套回调转换为平面流式操作。定义事件之后,可以使用callbackFlow将listener转换为事件流。┌───操作1───►操作2───►操作3───►完成┐。│ │ │ 回调2 │ │ │。│ │ │ │回调3│ │ │ │。
2025-06-27 21:29:47
936
原创 结构化并发
任务树让父任务与子任务的关联更加紧密。消息和和控制可以在树中传递,父任务可以感知子任务成功或失败,也可以控制子任务取消或退出。因此可以保证父任务结束(成功、失败或取消)时,全部子任务都已结束。让并发代码不再是一坨面条。按照启动关系,任务构成一棵树。显然这棵树将产生了一个清晰的边界,将并发任务和外部代码分隔开。结构化并发就是使用任务树约束并发任务边界,将变法任务变成像函数、类一样整体结构,作为构建复杂程序的基础。但并发程序很难开发,由于缺少边界约束,很难有效管理内部子任务,同时和外部代码产生清晰边界。
2025-06-25 21:25:32
278
原创 我对续体传递风格CPS的理解
显然fcps表达的就是“先对x应用f运算,再对结果应用另一个运算”,这里的k就代表“另一个运算”。观察h(x)和h2(x)的定义可以发现,h(x)的步骤是固定的、静态的。通过调整fcps的第二个参数,可以很容易的构造出“先应用f运算,再应用另一个运算”的函数。假设有两个运算y = f(x)和m = g(n),我们构造一个复杂运算h(x):首先对参数x应用f运算,再对结果应用g运算。我们可以从更抽象的层次理解h(x):首先对参数x应用f运算,再对结果应用另一个运算。
2025-06-25 01:12:32
157
原创 值类:Kotlin中的零成本抽象
仔细观察UserName和Email两个类,都是把一个String对象和一些专属操作绑定起来,构成一个新类型。用户名不能是空白,不能是"null",也不能包含"@"。值对象(Value Object)是领域驱动设计中不可变的概念片段,值类是Kotlin零开销的类型安全包装特性。如果当值对象只需封装单个值时,值类是最佳实现方式。Kotlin的值类(Value Class)是一种强大的类型安全工具,允许开发者创建语义明确的类型,并保持运行时零成本。但在运行时,值类不会产生额外性能损耗,可以做到零成本抽象。
2025-06-17 19:54:30
742
原创 从MVC到MVVM:从过程式走向声明式
以前学习MVVM模式时写了一篇。近来重读,有了一些新想法。从MVC模式到MVVM模式的变化,体现出在技术推动下,界面构造方法从传统的过程式向声明式演进。从“在坐标(x,y)到(a,b)之间绘制一个红色矩形”到“坐标(x,y)到(a,b)之间存在一个红色矩形”。我们先简单了解一下从MVC到MVVM的演进过程。图1 从MVC到MVVM的演进过程从上图可以看出,业务发展引发界面复杂度超出过程式构造方法适用范围,为演进提供了驱动力和必要性。而数据绑定等自动化技术的突破为演进提供了路径和可行性。
2025-06-14 18:23:35
1118
原创 CSS入门
本文档面向的读者是有一点HTML基础,希望学习CSS的开发者。文档内容分为基础、布局、进阶三部分。基础部分介绍CSS中常用和通用的元素样式、选择器以及盒模型。布局部分介绍如何在HTML中排列元素。进阶部分介绍CSS的高级内容,包括动画、函数、响应式设计等。文档附录包含了一些速查表,方便读者查阅。CSS是Cascading Style Sheets的缩写,翻译为层叠样式表。CSS是一种样式表语言,用来描述HTML文档的表现方式,如字体、色彩、背景色等等。我们先从一段简单的CSS代码开始。
2025-05-24 23:00:39
1003
原创 CSS手动布局
让元素浮动到上级元素盒子的左侧或右侧。浮动元素会被移出文档流,然后向左(右)平移,直到触碰盒子边界,或另一个浮动元素。其他内容环绕浮动元素排列,填充浮动元素右(左)侧和下方的空间。/* 相对(正常布局)位置。/* 视口固定位置。CSS支持单独设置某个元素的布局,最主要的属性是。也可以改变元素的位置。代码1 手动布局属性。
2025-05-07 20:45:57
392
原创 CSS分栏布局
浏览器使用这个值计算栏的数量,如果还有额外的空间,浏览器会增加栏的实际宽度。分栏布局将区域划分为若干垂直的栏,子元素放置到栏中,填满一个后再填充下一个。/* 内容优先填充靠左侧的栏。/* 内容平均分配到每个栏中。如果希望分栏容器中的某个子元素跨越所有的栏,可以将子元素的。属性,将内容优先填满靠左侧的栏,或者平均分配到每个栏中。代码3 column-rule-*
2025-05-06 23:01:16
604
原创 CSS网格布局
minmax(min-content, 100px) /* min-content是不换行、不溢出时网格项需要的最小空间。minmax(100px, max-content) /* max-content是不换行、不截断时网格项自然占据的空间。minmax(auto, ...) /* 等价于 minmax(min-content, ...) */代码4 网格项的grid-column-start/grid-column-end属性可以调整放置位置或横跨多列。/* 网格项横跨3个行轨道。
2025-05-06 22:21:35
647
原创 正常流布局
元素分为块元素和行内元素两类。块元素独占一行,行内元素则是在行中,在前面元素的右边排列。如果一行排满了,行内元素继续从第二行开始排列。布局决定了元素的排列方式。正常布局是怎么排列元素的呢?各行从上到下,行内从左到右。,是一种特殊的行内元素,它像其他行内元素一样,在行内排列,同时像块元素一样可以设置高度、宽度和边距。如果希望为行内元素设置高度、宽度或垂直内外边距要怎么做呢?可以使用行内块元素。的元素,不产生换行,高度和宽度由元素内容决定,不能设置垂直方向的内边距和外边距。的元素,独占一行,可以设置高度。
2025-04-28 18:09:55
364
原创 弹性盒子布局
新的一行(列)默认排列在原行(列)的下方(右侧),这个方向叫做交叉轴方向。如果希望元素在水平或垂直方向依次排列,并且能够根据容器尺寸自动调整元素位置和大小,可以使用弹性盒子布局。,它就成为flex容器,它的下级元素成为flex元素。主轴方向由flex容器的。“排不下”有五种处理方法:一是收缩元素适配主轴长度,二是换行,三是溢出,四是截断,五是使用滚动轴。讲完了主轴上元素的排列方式,现在介绍元素在交叉轴方向的对齐方式,它由flex容器的。如果某个flex元素希望拥有独立的对齐方式,可以使用flex元素的。
2025-04-28 18:09:19
724
原创 CSS基础
CSS是Cascading Style Sheets的缩写,翻译为层叠样式表。CSS是一种样式表语言,用来描述HTML文档的表现方式,如字体、色彩、背景色等等。我们先从一段简单的CSS代码开始。代码1 CSS示例p {color: red;这段代码的效果是将HTML文档中全部<p>元素里的文本设置成红色。大括号里面的是CSS规则,格式为属性: 属性值;每条规则占一行,以半角分号结尾。属性和值之间以半角冒号分割,属性和值的前后可以添加空格。color表示文字色彩属性,red。
2025-04-24 21:16:50
1054
原创 AIP代码生成器——标准化接口开发智能工具
AIP代码生成器遵循Google API Improvement Proposal(AIP)设计准则,为RESTful API开发提供标准化方法和批量方法模板,快速生成符合AIP的代码框架。支持多种语言和框架。
2025-04-24 10:57:25
939
原创 Vue3笔记
/script></script><template>模型实际上是双向的ref。每个v-model只包含一个简单的状态,并非整个组件整体状态的聚合。组件的整体状态由多个v-model组成。
2025-04-18 20:49:18
325
1
原创 AIP目录
AIP是总结了谷歌API设计决策的设计文档,它也为其他人提供了用文档记录API设计规则和实践的框架和系统。专注于开发灵活API的设计文档。
2025-04-18 19:13:38
318
原创 AIP-236 策略预览
策略是一种资源,它提供规则,许可或拒绝对其他资源的访问。通常,策略的结果可以计算为特定的结果集合。未经充分验证就变更策略,可能会产生意外后果,严重影响客户的整体基础设施配置。为了安全的更新资源,利用策略推出API测试这些变更,是有好处的。预览是策略资源的安全推出机制,让客户能够在变更生效之前,验证所提交的变更对生产流量的影响。针对流量的策略评估结果会记录下来,为客户提供数据,测试变更是否正确。防火墙策略是适合预览的典型场景。使用流量评估新配置,观察哪些IP会被放行或拦截。
2025-04-18 19:12:22
1054
原创 AIP-217 不可达资源
有时,用户可能会请求一系列资源,而其中某些资源暂时不可用。最典型的场景是。例如用户可能请求返回多个上级位置的资源,但其中某个位置暂时不可达。此时仍然需要向用户提供所有可用资源,同时告诉客户有部分缺失。
2025-04-11 23:46:11
944
原创 AIP-216 状态
许多API资源都带有“状态”概念:通常指资源在其生命周期中的位置。例如,虚拟机可能处于配置中、可用、关闭中,或者其他几种可能的情况之一。作业或查询可能处于准备运行、运行中、已完成等。
2025-04-07 20:20:40
607
原创 AIP-215 API特定proto
API通常使用API特定proto定义,偶尔依赖通用组件。保持API相互隔离可以避免版本问题和客户端库打包问题。
2025-04-06 22:24:55
354
原创 AIP-214 资源过期
客户经常希望设置某个资源或资源属性不再可用或生效的时间(例如轮转安全密钥)。目前,我们建议客户设定一个具体的“过期时间”,保存在域。然而,如果客户希望设定相对时间偏移量,而非具体的过期时间时,这会增加额外负担。此外,现实中存在“生存时间”(通常缩写为TTL)概念,在使用自动生成的客户端库时,这个域的典型格式(以秒为单位的整数)可能导致较差的用户体验。
2025-04-06 20:58:36
287
原创 AIP-213 通用组件
根据规定,除使用“通用组件”包之外,API必须是独立的。通用组件包是给多个API使用的。如果可以安全在多个API之间共享同一个消息,通用组件可以让客户端更容易API交互。例如关于特定概念的客户端代码只需要编写一次,一个API的应答中的消息可以直接用于另一个API的请求,无需低效的复制。当让这种优势也存在重要的限制和局限性,不应轻易尝试。请注意,即使组件所属领域是通用的,组件也可能是组织特定的。
2025-04-04 13:56:49
608
原创 AIP-211 授权检查
大多数操作,无论读或写,都需要授权:获得执行用户请求的操作的权限。此外,向未授权用户提供了多少信息也非常重要,因为信息泄露也是安全问题。
2025-04-02 22:08:37
291
原创 AIP-210 Unicode
省流在我们的API中,“字符”指的是“Unicode码点”。在API文档(例如API参考文档、博客文章、营销文档、计费说明等)中,“字符”必须定义为Unicode码点。
2025-04-01 21:22:45
1024
原创 AIP-203 域行为文档
在定义protocol buffer中的域时,按惯例要向用户解释域行为的某些方面(例如域是必需的还是可选的)。此外,让其他工具理解域行为也很有用(例如优化客户端库签名)。
2025-03-31 21:12:35
682
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人