网站开发费怎么做账医药网站开发

news/2025/9/23 2:01:31/文章来源:
网站开发费怎么做账,医药网站开发,flash网站模板中心,分类信息网站 建议 建设简介#xff1a; 欲善其事#xff0c;先利其器。对于研发同学#xff0c;在日常的开发工作中#xff0c;我们与之打交道最多的便是编程的IDE。能否高效和灵活的使用IDE#xff0c;将对我们的工作效率起着举足轻重的作用。 一 、背景 1 、目的 欲善其事#xff0c;先利其…简介 欲善其事先利其器。对于研发同学在日常的开发工作中我们与之打交道最多的便是编程的IDE。能否高效和灵活的使用IDE将对我们的工作效率起着举足轻重的作用。 一 、背景 1 、目的 欲善其事先利其器。对于研发同学在日常的开发工作中我们与之打交道最多的便是编程的IDE。能否高效和灵活的使用IDE将对我们的工作效率起着举足轻重的作用。 研发同学在开发中最主要做的两件事分别是架构设计和编码前者主要取决于大量的项目经验积累和个人的思考深度也是作为研发的核心竞争力短时间内很难快速求成后者主要取决于日常的编码练习和一定程度的IDE信息差能够通过下文中介绍的一系列技巧进行能力的快速补齐和巩固加强。 本文的主要目的有两方面 一方面对IDE的快捷操作和高效技巧结合自己多年的实践和理解进行一次系统性的总结和梳理。另一方面希望通过本文系统性的梳理能够帮助更多的同学提高研发效率无论你是刚入手不久的新人还是有着多年开发经验的专家相信你都能够在本文中发现一片新天地让你能够有更多的时间和精力去做更有意义的事情。 2 、定位 网上很多技术网站和个人博客对于IDE各种技巧和便捷操作总结得非常具体且详细对于单点的详尽程度都是极具参考和学习价值的。但其对应的问题是这些很多很优秀的文章出自于不同的手笔有各自的行文风格且分散在各个网站的散点难以系统化。 我对本文的定位是将各种技巧以大分类的形式进行收拢和聚合以帮助大家构建和完善整体的知识体系大幅度提高开发效率。对于每个分类点到即止替代咀嚼式灌输方式的是尽量使用渐进式引导的方式。 3 、普适性 JetBrains系列的IDE产品众多除了下图之外还有其他未列入的如Google二次开发的Android Studio等。虽然归为多个产品实例但这些IDE的内核都是一样的只是在内核的基础上额外添加了各自的语言特性。本文将以使用量最高的一款IDE——IDEA为例进行展开文中提到的绝大多数能力和技巧在其他IDE均同样适用一通则百通。 二、 Postfix Completion 1 、介绍 Postfix Completion (下称Postfix) 是一种通过 . 模板Key 来对当前已经输出的表达式添加和应用预设代码模板的编码增强能力。 其核心要解决的问题是将编码过程中一些通用的代码结构范式进行抽象和沉淀并能在同类型的场景下通过 . 模板Key 的方式进行唤醒和复用。 举个例子现在需要完成下面一段代码的编写为了对name参数进行判空保护 if (name ! null) {} 在普通文本编辑器中其中 if 2次name 4次(){}! 共6次再加空格Tab和光标切换一共需要按键23次。 在IDEA编辑器中不使用Postfix时一共需要按键20次不考虑代码格式化的情况可以减少到16次。 在IDEA编辑器中使用Postfix时只需要8次如下图 在这个例子中可以对比出使用Postfix前后的效果使用之后在编码中减少了一半的手动按键操作且生成的代码是自带格式化的。在实际的编码过程中各项目大小和复杂度差异性虽然很大但细化到这种基本单位的编程范式时它们都是融会贯通的。 与上例中nn并列的PostfixIDEA给我们预设的还有很多下面对一些非常高频使用的Postfix进行梳理。 2 、梳理 var 快速定义一个局部变量自带IDE的类型推断 notnull 快速进行NPE的判空保护 nn 同notnull是它的简写推荐用这个更加便捷 try catch 快速对当前语句添加try catch异常捕获同时IDE还会对catch中的Exception自动做类型推断 cast 快速实现类型强转不需要反复使用()包裹和光标切换配合instanceof使用时还能自动实现cast类型的推断 if 快速实现if判断的代码范式 throw 快速实现抛异常 for 快速实现集合或数组的迭代 fori 快速实现集合或数组的带索引值迭代同时对整型数字也支持 sout/soutv 快速实现不带参数/带参数的打印功能 return 快速实现方法中的值返回逻辑 format 快速实现字符串格式化 3 、高级用法 担心系统预设的Postfix不足以满足我们的编码需求IDEA还提供了Postfix的自定义功能。 这里我以自定义一个对集合判空的代码范式来举例说明自定义Postfix的流程 1进入IDE设置界面然后依次进入Editor General Postfix Completion 面板左下角加号 Java 2在弹起的页面中按照下图进行配置然后保存退出设置页。 此时我们自定义的 isempty 这个Postfix即完成了下面来看下实际使用的效果 在实际开发过程中对于根据已经输入的表达式就能决定接下来代码格式的功能我们都能使用这种自定义方式进行代码的抽象和复用。 接下来介绍IDE中一种跟Postfix功能很相像但灵活度更高的能力——Live Template。 三、 Live Template 1、 介绍 介绍之前可以先看一段简短的编码过程 上面这段编码中我先后使用了Live Template的以下三个模板能力 psfs定义字符串常量main添加入口函数sout实现日志输出 这里我们将其和上面提到的Postfix对比来看两者都是提供代码级别模板的功能。不同的是Postfix需要一个已经输入的表达式和 . 模板Key 来进行触发而Live Template不需要这些它仅仅需要 模板Key 即可触发。 Live Template提供的预设模板要比Postfix要高出一个数量级因此这里我就不进行一一演示我们可以进行设置面板然后按照Editor Live Templates的路径自行查看如下图 2 、高级用法 和Postfix一样Live Template也支持自定义模板但它的自定义模板相对来说更加灵活和开放甚至支持我们直接植入脚本。鉴于Live Template的高度灵活性单独介绍这块会占据大量的篇幅因此这里我将从几个实际的案例场景来开拓一下思路而具体自定义拓展过程就不详细展开介绍了。 Key值映射 将DB中查询到 List 结构的数据根据Key值映射转化为 MapK, T 结构的数据以便于进行后续的数据填充逻辑 DB批量查询 在数据查询时我们会有根据ID主键进行批量DB数据查询的诉求如下 ListUser users userMapper.queryUserByIds(userIds);这种写法会有一个弊端就是当 userIds 大到一定的量级时该查询会变得非常耗时。 对于该问题其中一个解法是将这个大的 userIds 拆分成多个批次然后让这多个批次异步并行去查询。这里便使用Live Template来抽取一个针对该场景的代码模板如下 按照该模板我们的查询语句将变成这样 ListUser users batchQuery(userIds, 100, userMapper::queryUserByIds, null);可以看到和之前相比多传一个分批的size参数同时还支持指定的异步任务调度器的自定义配置而返回结果和之前的查询方式保持完全一致不需要外部有额外的适配工作。 脚本植入 这个功能是我非常看好Live Template的主要原因它的灵活性和拓展性也主要来源于这里。它支持我们通过一个 模板Key 来唤起和执行一段脚本这也就意味着我们的自定义的Live Template模板是可编程的极大程度提高了该模板的拓展性。 单描述功能会有些空洞这里我结合一个实际案例进行介绍我们来实现一个跨电脑的代码共享功能 1首先使用python的flask框架写一个极简的服务端应用并启动提供最简单的 push 和 pull 的能力如下 from flask import Flask, requestDEFAULT nothing code DEFAULTapp Flask(__name__)app.route(/push) def push():global codecode request.args.get(code, DEFAULT)return Successapp.route(/pull) def pull():return codeapp.run() 2然后我们来通过groovy脚本实现一个代码 pull 的模板这里应用了Live Template的 groovy script 能力对应脚本如下 def url new URL(http://127.0.0.1:5000/pull); def conn url.openConnection() as HttpURLConnection; def result conn.inputStream.text; return result 3最后再实现代码push的模板脚本如下下面的代码入参是通过剪切板赋值传递过来的 def code _1; def url new URL(http://127.0.0.1:5000/push?code new URLEncoder().encode(code)); def conn url.openConnection() as HttpURLConnection; def result conn.inputStream.text; return result 此时就已经完成了跨设备的代码分享功能为方便演示这里就用 People1 和 People2 两个类来模拟两台独立的电脑。People1 将自己的一段代码复制到剪切板中然后通过 push 模板调用 push 接口来将这段代码上传到Python服务应用中People2 再通过 pull 脚本来调用服务端的 pull 接口访问到 People1 上传的代码并输入到当前的代码编辑器中实现效果如下图 这里的代码共享只是一个引子除此之外我们还能写很多有意思的脚本比如在IDE中查天气、通过IDE聊天等等自行脑补拓展。 介绍完Live Template之后接下来介绍文件级别的模板——File Template。 四 、File Template 1 、介绍 File Template顾名思义对应文件级别的模板。对于该模板我们使用脚本的主要在于两个场景分别是文件头和文件的自定义下面结合案例依次展开。 2 、自定义文件头 按照下图的路径来更改文件头的格式IDE就会在我们新建一个类或接口时根据这里的配置格式来自动生成对应的文件注释头。 3 、抽象通用Controller 看下面一段代码这是一个针对于User这个domain的增删改查接口类 package com.alibaba.ide.code.controller;import com.alibaba.ide.code.entity.Result; import com.alibaba.ide.code.entity.User; import com.alibaba.ide.code.service.Condition; import com.alibaba.ide.code.service.UserService; import org.springframework.web.bind.annotation.*;import javax.annotation.Resource; import java.io.Serializable; import java.util.List;/*** author puke* version 2021/2/9*/ RestController RequestMapping(api/user) public class UserController {Resourceprivate UserService userService;PostMappingpublic ResultUser create(RequestBody User record) {User user userService.insert(record);return Result.success(user);}PutMappingpublic ResultUser update(RequestBody User record) {User user userService.update(record);return Result.success(user);}DeleteMapping({id})public ResultVoid deleteById(PathVariable Serializable id) {boolean success userService.deleteById(id);return success ? Result.success() : Result.fail();}GetMapping({id})public ResultUser queryById(PathVariable Serializable id) {User user userService.queryById(id);return Result.success(user);}GetMappingpublic ResultListUser queryByCondition(ConditionUser condition) {ListUser list userService.queryByCondition(condition);return Result.success(list);} } 仔细看这段代码会发现如果基于该接口再新增另一个domain对应的Controller接口类代码中的基本结构和逻辑都是可以复用的。此时便是File Template排上用场的地方我们定义一个通用的 Controller 模板将共性的部分抽象到模板里再将差异性的部分通过模板入参 Subject 变量传入进来注这里需要用到Velocity 模板[1]的知识。 #set($SubjectOfLowerFirst ${Subject.substring(0,1).toLowerCase()} $Subject.substring(1)) package ${PACKAGE_NAME};import com.alibaba.ide.code.entity.Result; import com.alibaba.ide.code.entity.${Subject}; import com.alibaba.ide.code.service.Condition; import com.alibaba.ide.code.service.${Subject}Service; import org.springframework.web.bind.annotation.*;import javax.annotation.Resource; import java.io.Serializable; import java.util.List;#parse(File Header.java) RestController RequestMapping(api/${SubjectOfLowerFirst}) public class ${Subject}Controller {Resourceprivate ${Subject}Service ${SubjectOfLowerFirst}Service;PostMappingpublic Result${Subject} create(RequestBody ${Subject} record) {${Subject} ${SubjectOfLowerFirst} ${SubjectOfLowerFirst}Service.insert(record);return Result.success(${SubjectOfLowerFirst});}PutMappingpublic Result${Subject} update(RequestBody ${Subject} record) {${Subject} ${SubjectOfLowerFirst} ${SubjectOfLowerFirst}Service.update(record);return Result.success(${SubjectOfLowerFirst});}DeleteMapping({id})public ResultVoid deleteById(PathVariable Serializable id) {boolean success ${SubjectOfLowerFirst}Service.deleteById(id);return success ? Result.success() : Result.fail();}GetMapping({id})public Result${Subject} queryById(PathVariable Serializable id) {${Subject} ${SubjectOfLowerFirst} ${SubjectOfLowerFirst}Service.queryById(id);return Result.success(${SubjectOfLowerFirst});}GetMappingpublic ResultList${Subject} queryByCondition(Condition${Subject} condition) {List${Subject} list ${SubjectOfLowerFirst}Service.queryByCondition(condition);return Result.success(list);} } 模板定义完成接下来来看一下实际的使用效果 这里使用 Goods 作为新的domain对象可以看到生成的 Controller 代码已经具备 UserController 的全部能力并且生成的代码全部都是 Goods 相关的api这样就实现了File Template的横向迁移能力。 五、 低频高效快捷键 1、 介绍 IDEA中的快捷键多达上百个我们很难把每个都记清楚网上也有很多对应的总结。这里我主要梳理一些大家使用相对比较低频但又非常高效的快捷键。 2 、梳理 选择重复元素Control G 通常情况下我们可以使用 Shift F6 对类名、方法名和变量名进行批量更改但对于其他元素进行批量更改时该快捷键特别合适且不限编程语言。 批量框选Option 鼠标左键拖拽 对于对齐的代码进行批量更改的最优解没有之一 整行移动Option Shift ↑/↓ 快速调整代码执行顺序免除繁琐的剪切粘贴过程 整行/块复制Command D 对于整行/块的复制效率远高于纯手动的复制粘贴 展开/收起Command . or Command Shift /- 前者快速显示/隐藏当前方法体后者快速概览当前类的所有方法 修改方法签名Command F6 在方法被多文件或多处调用时该方式替换效率极高 查看历史剪切板Command Shift V 开发中经常会出现需要复制多个文本的诉求而PC默认的剪切板只能保存一个该功能专门用来解决这个痛点 代码抽取 代码抽取主要用在代码重构的时候以最快速度达到我们抽取一个变量、方法的目的。 1抽局部变量Command Option V 2抽成员变量Command Option F 3抽静态常量Command Option C 4抽方法入参Command Option P 5抽方法Command Option M 六、 代码调试 代码调试在开发中使用的非常多常规的单步、多步、进入、跳出操作这里也不特殊说明了。 有一点值得说的就是利用条件断点来实现运行期的代码植入功能先看下图 可以看到Debug模式运行时我们能动态改变 age 变量的值本来被赋值为 20 的结果输出出来却是 10。 这个是我在开发中无意间发现的一个功能算是一个Trick了。但这个功能在实际的开发过程中特别有用尤其针对于一些代码改动后再次运行的成本比较高的场景。比如Android开发过程中能够在不重新打整包的情况下动态修改页面中各个元素的样式、接口的请求、数据的内容等等再比如服务端场景中如果我们的应用支持Debug模式则可以通过该功能实现应用无需重新部署的情况下进行动态更改上下文逻辑的操作。 七、 写在最后 跬步至千里小流成江海开发工作有大小业务需求有缓急但终究要落到眼下从一砖一瓦的基石开始从一行一列的编码开始希望本文中能帮助到更多的研发同学。 作者开发者小助手_LS 原文链接 本文为阿里云原创内容未经允许不得转载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站群建设公司wordpress 列表分类链接 v1.3

前段时间迁移.NET Core做了大量的试水和评估,今天整理一下分享给大家。大致有以下几个部分:1. .NET Core的由来2. 为什么要迁移.NET Core3. .NET Core3.X主要特性4. .NET Standard和.NET Core5. .NET Core Roadmap&版本选择接下来,我们详…

蓝牙app开发软件鹤壁搜索引擎优化

1. Multiple XIP support XIP(eXecute-In-Place)是本地执行,允许在ROM芯片内执行XIP区域(region)的应用代码,而不必再把代码读取到RAM中来执行。WINCE支持我们在单个系统中构建(construct)多个XIP区域,基于下面的理由使用多个XIP区域来代替…

建设网站导航什么是网络推广营销

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的一句鸡汤🤔&…

旅行网站信息技术化建设邯郸市环保局网站建设项目环境

一、创作思路 1、创建一个自定义CustomPrimitive 2、可动态更新线的点位 3、方便后期绘制线 二、实现代码 1、创建一个CustomPolylinePrimitive类,并加入更新的代码 export default class CustomPolylinePrimitive {constructor(options) {this._props options;/*** 渲染列表…

大学网站建设装修公司加盟哪个好

大模型部署背景 参数用FP16半精度也就是2字节,7B的模型就大约占14G 2.LMDeploy简介 量化降低显存需求量,提高推理速度 大语言模型推理是典型的访问密集型,因为是decoder only的架构,需要token by token的生成,因…

做一个网站赚钱吗菏泽定制网站建设推广

前言 前段时间开发新的微信小程序,借此机会将老掉牙的支付模块重构,并且支持现金支付(之前都是虚拟币支付),在重构期间遇到计算上的一些精度问题,虽然数额影响非常小但是影响比较大,我觉得有必…

网站seo检测做网站招商需要具备什么

无人机航测精品专栏链接:《无人机航空摄影测量精品教程》 【天工Godwork精品教程】任务一:创建工程(导入相片、编辑相机参数、导入POS) 【天工Godwork精品教程】任务二:导入控制点、POS权重设置、自由空三 【天工Godwork精品教程】任务三:刺像控点、空三平差、精度优化调…

文山专业网站建设漯河做网站的

当我们的代码打包过后再看源码就会变成下面这个样子: 这时候我们就调试不了我们的代码 解决方式: 在webpack.config.js中添加如下代码: module.exports {mode: "development", // 设置打包的模式:production生产模式…

门户网站建设的必要性大连排名推广

Sleuth 一 引言 随着服务的越来越多,对调⽤链的分析会越来越复杂。它们之间的调⽤关系也许如下图: 问题: 1:微服务之间的调⽤错综复杂,⽤户发送的请求经历那些服务,调⽤链不清楚,没有⼀ 个⾃…

建设网站服务费会计分录网站建设的销售话术

写在前面 Edge现在也不管用户体验了吗? 这个BUG都快一个月了,还没见修复,从118.0.2088开始,我是在2023年10月份一次更新后发现的这个BUG,结果社区论坛什么信息都没有,英文也没收到。 Edge的BUG现象 不知道哪次Edge…

网站正能量大全上海公司排名

有时需要判断一个字符是不是汉字,比如在用户输入含有中英文的内容时,需要判断是否超过规定长度就要用到。用 Javascript 判断通常有两种方法。1、用正则表达式判断js判断字符是否是汉字.content{width:350px;overflow:hidden;border:1px solid #ddd;}fun…

网上宿迁官方网站互联网推广方法

1、电路芯片 485芯片有很多种,项目中用的比较多的是高速SP3485。满足RS-485和RS-422串行协议的要求,兼容工业标准规范,数据传输速率可高达10Mbps(带负载)。 2、工业设计 485需要做防雷考虑、瞬态过电压抑制、阻抗匹配…

郑州制作平台网站舟山做网站

正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。正则表达式经常被用于字段或任意字符串的…

金坛建设网站深圳 网站制作

近年来,ITX主机和小型化系统变得越来越受欢迎。英特尔的NUC受到许多玩家们的关注。作为mini主机的代表NUC小巧设计和灵活性使它成为很多玩家和科技爱好者的选择。它的高性能和可玩性使得它在迷你型准系统市场上备受推崇。双11来临之际,我们分析下哪款高性…

青岛做网站eoe广告店名大全集

涤生_Woo2017年11月11日阅读 15544关注一篇文章带你熟悉 TCP/IP 协议(网络协议篇二)同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍。一图看完本文一、 计算机网络体系结构分层计算机网络体系结构分层计算机网…

支付网站招聘费分录怎么做附近电商培训班

文章目录 1. 什么是EPS?2. 主要构成3. EPS的设计如何符合功能安全?4. 代表性的厂家1. 什么是EPS? EPS(Electric Power Steering,电动助力转向系统)是一种利用电动机提供转向助力的系统,取代了传统的液压助力转向系统(HPS)。EPS通过传感器检测驾驶员的转向意图,并由电…

新手建设什么网站好如何进行网站icp备案

最近参加了成都精灵云的笔试与面试,岗位是c工程师。后面自己复盘了过程,复试部分总结如下,希望能对各位想进该公司以及面试C工程师的同学提供一些参考。     后续也会陆续分享各公司的面试和笔试经验在该专栏,想看的可以关注一下…

企业网站开发的文献综述网站页头制作

preg_replace_callback 函数执行一个正则表达式搜索并且使用一个回调进行替换。语法图1这个函数的行为除了可以指定一个 callback 替代 replacement 进行替换字符串的计算,其他方面等同于 preg_replace()。参数说明:$pattern: 要搜索的模式,可…

网站制作教程一般地建网络网站建设与维护的重要性

2017年计算机二级上机考试试题及答案20世纪60年代中期之前的第一代计算机网络是以单个计算机为中心的远程联机系统。下面是小编整理的关于计算机二级上机考试试题,希望大家认真练习!1[单选题] 一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树…

金昌做网站中国航天空间站最新消息

MS SQL Server简介 Microsoft SQL Server(简称SQL Server)是由微软公司开发的关系数据库管理系统,它是一个功能强大、性能卓越的企业级数据库平台,用于存储和处理大型数据集、支持高效查询和分析等操作。SQL Server 支持广泛的应…