数据开发 的 代码规范 以及 代码评审脚本

java开发宝典 如果运行环境要求24小时不间断运行(即更新时不能停机),一些关键接口建议在前后端上线的下一个版本再删除,以防止升级过程中出现不必要的服务中断。具体实践过程中都会宣称提供Restful接口,实际由于软件面向业务场景的复杂性,很难将所有业务场景与HTTP请求类型相对应。所有查询接口的返回值都要能通过swagger查看字段定义。不能返回一个Object、Map之类的让前端去猜谜语。多使用 jdk自带库和被验证的第三方库的类和函数,(这个也不太理解,废弃的类直接删了不行吗)无论是包、类、方法、变量, 阅读详情

1、概述

  • 场景
    在数据开发中,由于各程序员风格不一、部分程序员代码太烂、代码注释过少等原因,导致代码维护时困难重重
    同事A请假去生娃,此时Ta的代码出了问题需要同事B去修改,但由于代码太烂,同事B改不动
  • 代码评审:通过 阅读代码 来 检查代码质量
    目的:降低代码维护成本
  • 使用代码评审自动化脚本(Python3实现),可提高代码评审的效率

2、代码规范

以下规范按照高危、强制、建议3个级别进行标注,优先级从高到低

2.1、通用代码规范

  • 注释
    【建议】中文注释≥1行
    【建议】注释不用太多,代码即注释
  • 命名规范
    【建议】用纯英文
    【建议】查词典用英文全称;当 名称过长 或 关键字冲突 时,可使用缩写
    【建议】变量、参数、类使用[形容词+]名词
    【建议】方法、函数使用动词[+名词]
    【强制】禁止数字开头
    【强制】禁止拼音和英文混用
    【建议】不使用保留字
时间命名规范【强制】格式示例【强制】变量名
年yyyy2022
年月yyyy-mm2021-01
年月日yyyy-mm-dd2020-02-02ymd
季度yyyyQq2021Q4、2022Q1
时分秒hh:mm:ss08:00:00
年月日时分秒yyyy-mm-dd hh:mm:ss2022-02-01 08:00:00
常见缩写全称中文常见缩写全称中文
fnfunction函数ymdYear Month Day日期
txttextfile文本文件cntcountv. 计数;n. 总数
objobject对象numnumber数字;号码
lslistn. 列表;v. 列清单lvllevel等级
liblibrary软件库dwdata warehouse数据仓库
strstring字符串bakbackup备份
probprobability概率skuStock Keeping Unit库存单位
confconfiguration file配置文件idxindex file索引文件
calccalculationn. 计算uvunique visitor独立访客
regexpregular expression正则表达式pvpage view页面浏览量
app application应用程序aiArtificial Intelligence人工智能
deptdepartment部;科;处addraddress地址
dbdatabase数据库pwdpassword密码
mktmarket市场bizbusiness商业
  • 括号
    【强制】左括号前不换行
    【强制】当行过长时,左括号后换行,换行后要缩进
    【强制】当右括号后还没结束时,不允许换行
{
	"timestamp": 1585744376001,
	"page": {
		"page_id": "页面ID",
		"last_page_id": "上个页面ID",
		"page_type": "登录页"
	},
	"actions": [{
		"action": "拖动",
		"item": "拼图验证码",
		"timestamp": 1585744376605
	}, {
		"action": "点击",
		"item": "登录键",
		"timestamp": 1585744377778
	}]
}
  • 其它
    【建议】代码中不得出现生产环境的明文密码
    【建议】单行代码不可太长(例外:长URL、长import)
    【建议】项目要有说明文档,名为README.md

2.2、配置文件和传参规范

  • 配置文件通常用于存储数据库连接参数
  • 通常是时间传参

https://yellow520.blog.youkuaiyun.com/article/details/122088401

2.3、Python代码规范

Python代码规范 继承 通用代码规范

命名规范说明示例
变量、方法、函数、包【强制】全小写,下划线分隔单词function_name
类中的方法和函数(不被外部直接调用的)【强制】双下划线开头,全小写,下划线分隔单词__method_name
常量【强制】全大写 和 下划线PUBLIC_CONSTANT
模块【强制】全小写,下划线分隔单词module_name.py
类【强制】每个单词首字母大写ClassName
项目名【建议】每个单词首字母大写ProjectName
注释规范注释建议
模块注释、函数注释、类注释、方法注释…【强制】三双引号,注释的前面没有空行
单行代码和多行代码 的 单行注释【强制】井号
单行代码后 的 单行注释【强制】两个空格+井号
多行注释(单行注释太长时,建议写成多行)【建议】井号(连续行)
其它规范说明
缩进、空行、空格【强制】Tab缩进量:4个空格
【建议】把Pycharm更到最新,用Ctrl+Alt+l来规范代码
字符串【建议】单行优先用单引号
【建议】单行子字符串里有单引号时用双引号,如:sql = "SELECT '2021-12-02'"
【强制】多行用三单引号
【建议】不使用三双引号
"""
模块注释
"""
from time import time

# 多行代码的
# 多行注释(一行写不下的时候才写多行)
NUM = 5
CNT = 1000


def function1():
    """函数注释"""
    return time()  # 单行代码后 的 单行注释


class ClassName:
    """类注释"""

    @classmethod
    def method4(cls):
        """方法注释"""


if __name__ == '__main__':
    print(__doc__)
    print(function1.__doc__)
    print(ClassName.__doc__)
    print(ClassName.method4.__doc__)

2.4、SQL代码规范

SQL代码规范 继承 通用代码规范

  • 命名
    【强制】库、表、字段、视图:全小写,下划线分隔单词
    【强制】视图:view_作为前缀
    【强制】临时表:temp_作为前缀
    【强制】备份表:bak_作为前缀
    【建议】库名和表名不使用复数名词,正例user_info,负例users_info和user_informations
  • 建表
    【强制】创建 表和字段 要添加中文注释
    【强制】涉及外键关联的字段,须添加外键注释
    【强制】建表时,主键字段排在所有字段的第一行
  • 查询
    【建议】关键字:全大写
    【建议】使用别称时不要省略AS
    【强制】注释用-- (双减号+空格,MySQL和HIVE都支持)
    【建议】子查询用WITH AS,每个子查询都附带中文注释
-- 整个查询的注释
WITH
-- 子查询注释
t1 AS (
  SELECT a FROM t0
),
-- 子查询注释
t2 AS (
  SELECT a FROM t1
)
-- 查询注释
SELECT a FROM t2;
  • 换行和缩进
    【建议】缩进量:4空格或2空格
    【建议】单行过长时,按允许换行的关键字换行
【强制】关键字前后是否允许换行前后
AS不允许
SELECT允许
FROM允许不允许
[LEFT/RIGHT/...] JOIN允许不允许
ON不允许
WHERE允许不允许
GROUP BY允许
HAVING允许
ORDER BY允许
LIMIT允许不允许
SELECT t1.f1
      ,t2.f2
      ,t2.f3
FROM t1
LEFT JOIN t2 ON t1.f1=t2.f4
WHERE t2.f1>4
  AND t2.f2<5
  AND t2.f3<>1
ORDER BY t1.f1;
  • 【建议】代码头部添加 日期、需求、业务、作者 等信息
-- 名称:A9527
-- 所属业务:A
-- 需求文档:链接
-- 创建者:小基基
-- 创建日期: 2021-10-24
-- 修改日志(修改日期,修改人,修改内容):
-- 2021-12-12,小黄,添加xxx指标

2.4.1、MySQL代码规范(待完善)

MySQL代码规范 继承 SQL代码规范

  • 库、表、字段
    【建议】建库时显式指定字符集utf8或utf8mb4
    示例:CREATE DATABASE db1 DEFAULT CHARACTER SET utf8mb4;

  • 表、字段
    【强制】非负数必须UNSIGNED
    【建议】主键 以pk_开头,唯一索引 以uq_开头,普通索引 以idx_开头
    【建议】建立组合索引,把区分度高的字段放在前面
    【强制】手机号存储不得使用数字,而使用VARCHAR(支持开头0及模糊查询)
    【建议】金额存储用INT,程序端乘以和除以100进行存取,因为INT占4字节,而DOUBLE占8字节
    【强制】高并发或分布式场景不允许外键约束

  • 【建议】字段允许适当 冗余,以减少联表来提高查询性能,但必须考虑数据一致性
    冗余字段应遵循:不是频繁修改的字段,不是text等较长字段

-- 表必备字段,这些字段起到似metadata的作用;在数据分析的时候,可用update_time作为数据抽取的增量标识
CREATE TABLE `xxx_info` (
  `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_flag` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '逻辑删除标识:1=删除,0=未删',
  PRIMARY KEY (`id`) USING BTREE
) DEFAULT CHARSET=utf8mb4 COMMENT 'xxx信息表';

2.4.2、HIVE代码规范(待完善)

HIVE代码规范 继承 SQL代码规范

  • 命名
    【强制】自定义函数以udf_开头
    【强制】表名以分层名作为前缀,分层仅仅是逻辑上的区分,所有分层都在同一个库
分层命名规范说明例
ODS
Operation Data Store
原始数据
ods+源类型+源表名+full/ifull:全量同步
i:增量同步
ods_postgresql_sku_full
ods_mysql_order_detail_i
ods_frontend_log
DIM
Dimension
合并维度
dim+维度+full/zipfull:全量表
zip:拉链表
日期维度表没有后缀
dim_sku_full
dim_user_zip
dim_date
DWD
Data Warehouse Detail
维度建模
dwd+事实+full/ifull:全量事实
i:增量事实
dwd_inventory_full
dwd_order_detail_i
DWS
Data Warehouse Service
聚合
dws+原子指标时间粒度有1d、1h…
1d:按1天
1h:按1小时
dws_page_visitor_1d
DWT
Data Warehouse Topic
累积
dwt_consumer
ADS
Application Data Store
最终指标
ads+衍生指标/派生指标
  • 建库
    【强制】建库必须加上注释
    【强制】建库不要添加LOCATION,而使用hive-site.xml中配置的默认值
    【建议】库按业务划分,不同库的表不会有关联(JOIN)
  • 建表
    【强制】普通表使用外部表(EXTERNAL_TABLE),临时表使用内部表(MANAGED_TABLE)
    【强制】创建内部表无需指定LOCATION
    【建议】ADS层使用\t或,作为列分隔符,行存\n分隔,不压缩,方便Sqoop导出
  • 分区
    【强制】日期分区使用ymd,数据类型STRING,格式yyyy-MM-dd,例如2022-02-02
    【强制】月分区使用ym,数据类型STRING,格式yyyy-MM,例如2022-02
    【建议】小时分区使用(ymd,h)多级分区,数据类型STRING,格式(yyyy-MM-dd,HH),日期在小时前
    【建议】ADS层不分区
  • 查询
    【建议】慎用DISTINCT,性能较差;不过在高版本HIVE可能会被优化,具体还要看执行计划
    【建议】慎用多个OR,避免笛卡尔乘积,可用UNION ALL代替(前提是不影响逻辑,因为UNION ALL不去重)
    【建议】慎用ORDER BY,ORDER BY为全局排序,只有1个Reducer

2.5、其它

2.5.1、Java和Scala(待完善)

  • 【强制】文档注释/** */;多行注释/* */;单行注释//
  • 【强制】缩进量:2或4个空格
命名规范说明示例
变量、方法【强制】第一个单词全小写,后续单词首字母大写methodName
类【强制】每个单词首字母大写ClassName
包、项目名【强制】全小写
常量【强制】全大写 和 下划线PUBLIC_CONSTANT

2.5.2、JSON (待完善)

命名规范说明示例
键【强制】第一个单词全小写,后续单词首字母大写cityId

2.5.3、Shell(待完善)

  • 【强制】脚本头:#!/usr/bin/sh
  • 【强制】注释方式:井号+空格,例如# 这是注释
  • 【建议】缩进量:4个空格
命名规范说明示例
变量、函数【强制】全小写,下划线分隔单词function_name
常量【强制】全大写 和 下划线PUBLIC_CONSTANT
脚本名【建议】全小写,下划线分隔单词sqoop_mysql2hive.sh

3、代码评审 自动化脚本

  • 功能:
    整体代码扫描、单个代码文件扫描

  • 使用方法:
    将(不含外部包)的代码 和 该代码扫描脚本 放到同级目录,使用Python3运行

代码扫描报告示例:

import os
import re
from collections import defaultdict
from pandas import DataFrame


class File:
    class Compile:
        @staticmethod
        def findall(string):
            return []

        @staticmethod
        def match(string):
            return not None

    # 文件名后缀
    SUFFIX = ''
    # 提取注释的正则表达式
    COMMENT_PATTERN = Compile
    # 合格代码的最低注释占比
    COMMENT_PROPORTION_THRESHOLD = 0
    # 代码头部模板
    HEAD_PATTERN = Compile
    # 单行代码最大长度
    LINE_LENGTH_LIMIT = 120
    # 不合规的代码语句
    UNQUALIFIED_CODE_PATTERN = Compile

    def __init__(self, file_name):
        self.file_name = file_name
        # 读取文件
        txt = self.read_file()
        # 字数
        self.number_of_words = len(txt)
        # 行数
        self.number_of_lines = len(txt.split('\n'))
        # 注释抽取
        comments = self.COMMENT_PATTERN.findall(txt)
        # 注释行数
        self.number_of_comments = sum(len(c.strip().split('\n')) for c in comments)
        # 注释个数的占比
        self.comment_proportion = self.number_of_comments / self.number_of_lines
        # 不及格原因
        self.reason_for_failings = []
        if self.comment_proportion < self.COMMENT_PROPORTION_THRESHOLD:
            self.reason_for_failings.append('注释太少')
        if self.HEAD_PATTERN.match(txt) is None:
            self.reason_for_failings.append('代码头部没有按照指定模板')
        if max(len(line) for line in txt.split('\n')) > self.LINE_LENGTH_LIMIT:
            self.reason_for_failings.append('单行代码过长')
        if self.UNQUALIFIED_CODE_PATTERN.findall(txt):
            self.reason_for_failings.append('含有不合格的代码语句')

    def read_file(self):
        with open(self.file_name, encoding='utf-8') as f:
            return f.read().strip()

    def report(self):
        print('文件名称', self.file_name)
        print('字数', self.number_of_words)
        print('行数', self.number_of_lines)
        print('注释行数', self.number_of_comments)
        print('注释行数占比', self.comment_proportion)
        print('不及格原因:' if self.reason_for_failings else '代码及格!')
        for e, r in enumerate(self.reason_for_failings, 1):
            print(e, r)


class PyFile(File):
    SUFFIX = '.py'
    COMMENT_PATTERN = re.compile(r'"""[\s\S]+?"""|# .+')
    COMMENT_PROPORTION_THRESHOLD = 0.05


class SqlFile(File):
    SUFFIX = '.sql'
    COMMENT_PATTERN = re.compile('-- .+')
    COMMENT_PROPORTION_THRESHOLD = 0.05
    UNQUALIFIED_CODE_PATTERN = re.compile(r'select\s+\*', re.I)


class JavaFile(File):
    SUFFIX = '.java'
    COMMENT_PATTERN = re.compile(r'/\*[\s\S]+?\*/|//.+')
    COMMENT_PROPORTION_THRESHOLD = 0.1


class ScalaFile(JavaFile):
    SUFFIX = '.scala'


class ShFile(File):
    SUFFIX = '.sh'
    COMMENT_PATTERN = re.compile('# .+')
    COMMENT_PROPORTION_THRESHOLD = 0.1
    HEAD_PATTERN = re.compile('#!/usr/bin/sh')


class Files:
    FILES = (PyFile, SqlFile, ScalaFile, JavaFile, ShFile)

    def __init__(self):
        self.statistic = {t.SUFFIX: [] for t in self.FILES}

    def traversal(self, path=os.path.dirname(__file__)):
        """递归遍历文件"""
        for file_name in os.listdir(path):
            abs_path = os.path.join(path, file_name)
            if os.path.isdir(abs_path):
                for p in self.traversal(abs_path):
                    yield p
            elif os.path.isfile(abs_path):
                yield abs_path

    def calculate(self):
        """计算 文件数、代码量、注释量…"""
        for abs_path in self.traversal():
            if abs_path == __file__:
                continue
            for f in self.FILES:
                if abs_path.endswith(f.SUFFIX):
                    self.statistic[f.SUFFIX].append(f(abs_path))
                    break

    @property
    def failed_codes(self):
        """不及格代码"""
        return (f.file_name for files in self.statistic.values() for f in files if f.reason_for_failings)

    def files_report(self):
        """分析全部代码"""
        self.calculate()
        df = defaultdict(list)
        index = []
        for suffix, files in self.statistic.items():
            index.append(suffix)
            df['文件数'].append(len(files))
            df['不及格文件数'].append(sum(1 if f.reason_for_failings else 0 for f in files))
            df['代码字数'].append(sum(f.number_of_words for f in files))
            df['代码行数'].append(sum(f.number_of_lines for f in files))
            df['注释行数'].append(sum(f.number_of_comments for f in files))
        df = DataFrame(df, index)
        df.loc['合计'] = df.sum()
        df['注释占比'] = df['注释行数'] / df['代码行数']
        df['不及格率'] = df['不及格文件数'] / df['文件数']
        print(df)
        # df.to_excel('代码扫描报告.xlsx')
        print('不及格代码:')
        for f in self.failed_codes:
            print(f)

    def single_file_report(self, the_file):
        """单个文件分析"""
        for f in self.FILES:
            if the_file.endswith(f.SUFFIX):
                f(the_file).report()
                break


if __name__ == '__main__':
    Files().files_report()
    Files().single_file_report(__file__)  # 检查自己
    # Files().single_file_report(r'')

4、数据逻辑校验机制

  • 数据开发不同于后端开发之处是:后端开发可是有测试妹子帮忙进行功能测试的噢~
    而数据开发工程师却没有😰😂😭

  • 数据逻辑错误不像功能bug那么明显,计算结果错误并不会使程序报错
    对此建立数据逻辑校验机制

  1. 主键重复值检验
  2. 主键NULL值检验
  3. 左联前后数量校验(联表后数据量=左表数据量)
  4. 时间数据类型校验,注意时区
  5. 度量值是否可加
  6. 数值类型校验,是否越界,是否损失精度
数据仓库之开发规范详解 为了避免底层业务变动对上层需求影响过大,屏蔽底层复杂的业务逻辑,尽可能简单、完整的在接口层呈现业务数据,建设高内聚松耦合的数据组织,使数据从业务角度可分割,显得尤为重要。从整个集团业务条线出发,形成数据仓库总体概念框架,并对整个系统所需要的功能模块进行划分,明确各模块技术细节,建设一套完整的开发规范 阅读详情

相关推荐

代码评审(Code Review)规范

Code Review由项目负责人发起,一个项目过程中至少2-3次,主要集中在项目中后期,如果项目规模较大,功能较多,时间比较宽裕,也可适当增加。1、大型项目,增加/修改超过10个文件或超过500行代码的,需组织CodeReview会议,邀请相关同事及高阶同事参与代码Review。2、小型项目,小需求修改(少于10个文件变更或少于500行代码的),至少需要1~2位同事帮忙进行代码Review并提出点评建议。代码的一致性、编码风格、代码的安全问题、脱敏问题、代码冗余、是否正确设计以符。

shadow_zed的博客 3916

Java上线数据订正_MySQL数据库数据订正

工作过程中时常遇到数据订正的需求,该操作本身不难。操作时要求能够保持回滚~对于能够满足回滚的要求,我通常执行备份表,然后执工作过程中时常遇到数据订正的需求,该操作本身不难。操作时要求能够保持回滚~对于能够满足回滚的要求,我通常执行备份表,然后执行变更!如果发送订正错误或者用户要求回滚的时候,就完全恢复整个表,这样做会有多余的操作,因为我们只要实际上可以选择备份要进行更正的数据!比如如下需求:将表r...

weixin_29048309的博客 289

大金融业务系统的技术架构演进方向

大金融业务架构演进 大金融三浪叠加的发展阶段:信息金融、互联网金融、智能金融,对标的业务架构从1.0、2.0发展到了今天的3.0架构。 信息金融采用1.0业务架构,采用瀑布型开发、单块架构、物理机、大型/小型机。互联网金融采用2.0业务架构,采用敏捷开发、垂直架构、虚拟机和X86传统机构架构;智能金融采用3.0业务架构,采用Devops、微服务、容器和云原生基础架构云。 目前大金融行业以烟囱式信息系统为代表的1.0架构业务系统和以弹性可扩展互联网业务系统正在逐步迁移到3.0的云原声架构体系,云原生架构的核

m0_37848449的博客 1618

sql规范

规范背景与目的 MySQL数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导RD、QA、OP等技术人员做出适合线上业务的数据库设计。在数据库变更和处理流程、数据库表设计、SQL编写等方面予以规范,从而为公司业务系统稳定、健康地运行提供保障。 设计规范 2.1 数据库设计 以下...

小雷音寺 455

代码评审智能化:问题自动发现

代码评审是软件开发过程中的关键环节,它有助于提高代码质量、发现潜在的安全漏洞和逻辑错误。传统的代码评审主要依赖人工进行,不仅效率低下,而且容易出现遗漏。随着软件项目规模的不断扩大和复杂度的增加,人工评审的局限性愈发明显。因此,实现代码评审的智能化,让系统能够自动发现代码中的问题具有重要的现实意义。本文的范围涵盖了代码评审智能化中问题自动发现的各个方面,包括核心概念、算法原理、数学模型、项目实战、应用场景、工具资源等,旨在为读者提供一个全面的技术指南。本文共分为十个部分。

AI Agent Harness Engineering 477

数据库编码规范Database Code Conventions

Database Code Conventions

ahooks useInterval:优雅封装 setInterval 的 React 定时器 Hook 完全指南

`useInterval` 是 ahooks(本仓库 packages/hooks)提供的一个用于优雅封装原生 `setInterval` 的 React Hook。在 React 函数组件中直接使用 `setInterval` 往往面临闭包过期、忘记清除定时器导致内存泄漏、`delay` 变化时定时器重建混乱等问题,而 `useInterval` 以极简 API 一次性解决这些痛点:它返回的 `

gitblog_01014的博客 230

从零开始:用ZEMAX设计双高斯照相物镜的完整流程(附55mm焦距实例)

本文详细介绍了使用ZEMAX设计双高斯照相物镜的完整流程,特别针对55mm焦距实例进行了深入解析。从初始结构选择、参数设置到优化策略和像质分析,逐步指导读者掌握这一经典光学设计方法。通过具体实例展示了如何实现卓越的像差校正,适用于35mm相机标准镜头等应用场景。

onion的博客 708

中信建投在金融电于化期刊发布 DataOps 实践

计算(结果)归集和服务归集;另一方面通过。

weixin_54625990的博客 1283

openEuler 快速入门

openEuler 是一个专注于企业领域的 Linux 发行版,广泛应用于服务器、云计算和边缘计算场景。最初由华为开发,现在由 Open Atom Foundation 进行开发和管理。Open Atom Foundation 是中国第一个开源软件基金会,得到了华为、阿里巴巴、腾讯、百度等知名企业的支持,并且中国信息通信部也是该基金会的一部分。可以将 openEuler 看作是 Red Hat 或 SUSE Linux 的等价物,但它与 SUSE Linux 更为相似。

HuaweiLab_Peach的博客 2056

将3DMax编辑的动画,导入给已经绑定蒙皮好的模型给Unity使用

现在程序猿想做独立游戏,即容易,也难。 说容易,引擎越来越傻瓜化。 说难,到哪去找靠谱的美术? 好在伟大的AssetStore(还有淘宝上)有大批不赖的资源可以用。 现成的模型,是好,但是,没有配套的动作,却是一件让人头疼的事情,即使用IK动画,也不能完美的弥补这一缺陷。 虽然Unity具备 retargeting 功能,但是,也不是万能的,很多情况下,非标准的骨骼会导致

正经的时候都在打游戏 1万+

入职新公司-如何更快的适应节奏(第二周要干活)

刚入职新公司的第一周应该是比较紧张的,因为第一周算是我们熟悉的时间,到第二周有可能就要开始做项目了,甚至有的节奏快的公司也就让你熟悉个两三天后就开始干活了。那么在这短短的几天的时间里,我们应该重点熟悉和了解什么呢,才能帮助我们更快的适应新的工作(能干活)? 如果公司能给你指定一个师兄那就会好一点,有什么问题都可以直接问师兄,但是问的太频繁也不太好,尤其是不能问让自己显的不专业的问题(当然也不会问?)。 思考总结了几条,希望对你有帮助。 第一步肯定是配置环境了 相信这一步是每个人到新公司第一天必做的事儿,这.

Milk~每天分享一点点,技术进步一点点 1942

封包(一)(雷电模拟器+ProxyDroid+查尔斯3.93+WPE)

自从换了工作就没有给大家分享一些干活,在加上陪伴自己的孩子没有时间更新文章了,这只能在晚上给大家写文档了,我最近在游戏公司上班,研究封包。我把这些东西都做成了笔记,我想有些东西是大家都想弄明白d ...

寒梅独自开 1万+

AI编程时代来临:通义灵码如何改变我们的开发流程?从代码生成到团队协作的全新实践

本文探讨了通义灵码如何引领AI编程时代的技术革命,从代码生成、审查到团队协作的全新实践。通过上下文感知生成、多模态交互和风格自适应等特性,通义灵码显著提升开发效率和质量,同时重构了开发流程和团队角色分配。文章还量化了AI编程的经济价值,并提出了风险控制策略。

weixin_29285605的博客 384

第八篇 永磁同步电机控制-MTPA、MTPV

MTPA 的全称是 Maximum Torque Per Ampere,即 最大转矩电流比控制。核心思想:在输出特定转矩时,通过控制定子电流的幅值和相位(即d轴和q轴电流的分量),使得所需要的定子电流幅值最小。通俗理解:就是用“最省电”的方式产生所需要的力矩。就像开车时,找到一个最合适的油门和档位配合,使得在输出相同动力时,油耗最低。

深耕汽车电子:AUTOSAR、电机控制,助力数字汽车 1875

Unity3D实现自定义河流路径或泥石流路径

此工具是一个插件,插件很好用,可以根据地形编辑河流的走向以及宽度,也可以发挥想象编辑成其他的效果,比如泥石流效果,岩浆效果,小溪,或者大江或者大河等等博客将会介绍可以编辑河流的工具的使用。希望这篇博客对Unity的开发者有所帮助。大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。提示:以下是本篇文章正文内容,下面案例可供参考本次总结的就是工具的使用, 有需要会继续增加功能不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

心疼你的一切博客 5271

数据生产力治理:复活威尔逊矩阵,破解数据团队高成本低价值困境

在数据工程领域,数据架构与数据治理是保障数据资产价值高效释放的基础。其核心原理在于通过统一的数据模型、元数据管理与自动化调度,构建清晰、可复用、可维护的数据链路,从而系统性降低数据处理复杂度。这一技术体系的价值在于将数据团队从重复、低效的“救火”式开发中解放出来,使其能聚焦于高业务价值的数据产品创新。典型应用场景包括应对数据烟囱林立、血缘关系混乱、任务依赖复杂等数据沼泽问题。本文以“数据生产力治理体系”为主题,深入探讨如何通过流程重塑、技术筑基与认知升级三管齐下,结合数据中台与数据产品化实践,让用于评估数据

weixin_34194087的博客 406

电子硬件仿真:设计一个频率范围为10k—50k的带通滤波器

带通滤波器是一种常用的滤波器类型,具有选择特定频率范围内信号的能力,并在该范围内提供一定的增益。它允许通过一定范围内的频率信号,并在该范围内提供一定的增益,同时在该范围之外的频率上提供较高的衰减。这意味着在通带内(10kHz至50kHz),滤波器的增益应为10dB,而在每个十倍频的频率点上,滤波器的增益应降低40dB。设计滤波器:使用滤波器设计工具(如MATLAB、Python的scipy库、Tina软件等),根据选定的滤波器类型(例如巴特沃斯滤波器),中心频率和通带宽度,设计一个4阶带通滤波器。

走向CTO的路上... 581

AI编程助手深度协作指南:从代码生成到架构设计的效率革命

在软件开发领域,提升开发效率与代码质量是永恒的主题。其核心原理在于通过工具与流程优化,减少重复劳动与认知负荷,从而释放开发者创造力。现代编程实践中,AI辅助编码技术正成为关键的生产力杠杆,它通过理解自然语言指令,自动化生成、审查与优化代码,显著降低了技术实现门槛。这一技术的核心价值在于将开发者从繁琐的语法记忆和模板代码编写中解放出来,使其能更专注于系统设计、业务逻辑与架构决策。其应用场景广泛覆盖前端组件构建、后端API开发、DevOps脚本编写乃至遗留代码重构。本文聚焦于如何通过重构“提问-编码”工作流、实

weixin_33951761的博客 408

Oracle EBS 帐套(Ledger/SOB)如何定义会计主体、如何支撑多准则 / 多报告、组织与帐套的绑定关系、以及项目落地时的设计差异。下面从实现逻辑、核心要素、组织模型、多账簿、科目设计、项

本文对比了Oracle EBS R12与SAP S/4HANA在帐套(Ledger)设计上的核心差异。Oracle采用4C架构(科目/币种/日历/准则),帐套作为独立会计主体,主辅账物理隔离;SAP则以公司代码为主体,通过平行分类账在同一凭证中实现多准则核算。关键差异体现在:Oracle强调边界隔离,适合差异大的集团;SAP注重统一视图,适合实时合并需求。实施时需注意:Oracle避免过度建账套,SAP需统筹科目与维度设计。两者分别体现了"盒子"与"滤镜"的设计哲学。

金牌架构师 419

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

这届黑客马拉松,和效率“杠上了” | StartDT Hackathon

重复的事情,为什么不让机器做?

StartDT的博客 825

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

十、数据仓库详细介绍(数据质量)流程与工具

做为数据人必须对数据质量保持足够的重视。数据质量管理是通过划分数据资产等级和分析元数据的应用链路,对不同资产等级的数据采取相对应的质量管理方式。数据质量管理流程图如下:原文内容可以翻阅阿里巴巴大数据之路,第 15 章数据质量部分。也可以查看阿里云文档:https://help.aliyun.com/document_detail/114560.html包含两部分内容:数据资产等级的定义根据资产等级分析数据处理链路1、数据资产等级的定义。

潜行者 1661

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

漫谈数据治理之三:流程上的规范化

治理理论概述 我们目前所积累的数据治理经验,大多数是在互联网场景下的,且与自己工作高度相关。如果想更进一步的搞好数据治理,就应该看一下业界相关的一些权威机构的理论。以国际数据管理协会,也就是DAMA,协会提供了一种DMBOK方式,覆盖了企业数据管理领域的十个方面,十分适合阿里腾讯这种大型企业。可以说,这是一个很不错的参考框架,用来对比我们目前的数据管理工作,寻找不足之处。 下图为数据管理十方面理论...

晓阳的数据小站 964

技术人职业信心危机:从代码腐化到行业影响与应对策略

在软件工程领域,代码质量和系统稳定性是衡量项目健康度的核心指标。其背后反映的是开发团队的工程实践与职业状态。当技术从业者普遍面临技能迭代焦虑、价值感模糊等挑战时,会引发一系列连锁反应:代码层面复制粘贴泛滥、文档缺失,架构决策趋于保守,团队学习文化消亡。这些现象不仅导致技术债堆积、系统脆弱化,更会侵蚀团队的创新能力和工程效能。从工程实践角度看,持续集成、DevOps等现代方法论的有效实施,高度依赖于团队的主动性与责任感。职业信心的流失会直接造成敏捷流程空转、自动化工具链形同虚设。面对AI工具普及和行业分化的趋

weixin_34354173的博客 407

AI项目框架结构

AI 项目框架

2501_91571672的博客 283
上一篇: 大数据(9e)Flink时间语义WaterMark
下一篇: 数据开发【配置文件】和【传参】规范
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值