- 博客(404)
- 资源 (9)
- 问答 (1)
- 收藏
- 关注
原创 初学深度学习,简单的神经网络样例
总的来说:‘输入*权重 + 偏值’的计算结果通过激活函数h(x)转换成一个神经元的输出值,再参与下一层神经元计算。3、数学关系:感知机(x1*w1 + x2*w2 + b)+激活函数h(x) = 神经元 ... 神经元。1、神经网络可分为多层:输入层->中间层(0...N)->输出层。结果:[0.31442506 0.69147506]使用到的库numpy,例子来源《深度学习入门》。2、发展脉络:感知机->神经网络。
2023-04-27 17:00:33
393
原创 API与C++中的API
1、什么是API1、是对某个问题的抽象,及用户与解决该问题的软件组件之间进行交互的方式;2、定义可复用模块,该模块可以嵌入到用户的应用程序中;3、一个明确定义的接口,可以为其他软件提供特定服务。
2022-09-11 18:12:28
1741
原创 【解决】tsc : 无法加载文件XXX, 因为在此系统上禁止运行脚本。
以管理员身份运行 PowerShell,并执行命令`set-ExecutionPolicy RemoteSigned`将PowerShell的执行策略更改为RemoteSigned。在vscode中用tsc编译ts文件的时候报错,tsc : 无法加载文件,因为在此系统上禁止运行脚本;2. 运行 `set-ExecutionPolicy RemoteSigned `命令,在询问更改执行策略的时候选择敲y。4. 回到vscode的终端,输入命令 tsc -v 不再报错,也可对ts文件进行编译。......
2022-08-14 16:27:07
4800
1
原创 C++ 测试框架收集
单元测试C+±doctest-测试框架C++单元测试工具——doctestgithub: doctest【先记录着,后续看到再更新】
2022-05-22 17:54:26
595
原创 CentOS7安装jdk1.8
一、查找yum源支持的jdk版本[root@drxun ~]# yum search jdk已加载插件:fastestmirror, product-id, search-disabled-repos, subscription-managerThis system is not registered with an entitlement server. You can use subscription-manager to register.Loading mirror speeds fro
2022-05-22 15:06:10
435
原创 测试类型之白盒测试
源代码评审方式: 人工分析+自动化检查工具自动化工具是一个宝贵的资源,它能够减少长时间对着代码行阅读而带来的繁重任务,但是自动化工具只能识别出可能的漏洞或可疑的代码片段。检测出的问题是否有效,仍然需要人工分析。对源代码来说,你看到的东西并不一定是实际执行的东西。软件构建过程在从源代码到汇编代码的转换中可能会发生很大的改变。不能说一种测试方法就一定比另一种测试方法更好。源代码分析工具编译时检查器、源代码浏览器或自动源代码审核工具优缺点优点覆盖能力: 白盒测试能够获得所有源代码,代码评审允
2022-05-14 11:29:56
183
原创 Linux编程之fork(创建一个进程)
一、API头文件:unistd.hpid_t fork();作用:如果fork()调用成功,就会使内核建立一个新的进程,所建的新进程是调用fork()的进程的副本。系统调用fork()没有参数,它返回一个pid_t类型的值pid。pid被用来区分父进程和子进程。在父进程中,pid被置为一个非0的正整数;在子进程中,pid被置为0。根据fork()在父进程和子进程中的返回值不同,程序员可以据此为两个进程指定不同的工作。二、例子#include <stdio.h>#include
2022-05-08 23:01:41
3778
原创 现有系统中安全的添加特性的方法
测试驱动开发(TDD)算法:(1)编写一个失败测试用例。(2)让它通过编译。(3)让测试通过。(4)消除重复。(5)重复上述步骤。价值:我们可以在同一时间只关注于一件事情。要么是在编码,要么是在重构;永远也不会在同一时刻做两件事情。差异式编程借助于类的继承,我们可以在不直接改动一个类的前提下引入新的特性。在添加完特性之后,我们便可以弄清楚到底想要如何添加新特性。【注】由于继承的缺陷,当前已很少使用。Liskov置换原则子类对象应当能够用于替换代码中出现的它们的父类的对象,不管后者
2022-05-01 13:38:14
157
原创 依赖是修改代码得到快速反馈的拦路虎
理解代码只要我们尚不熟悉相关代码的上下文, 就没法很快知道如何进行修改。时滞从做出修改到得到反馈所经历的时间。需要快速反馈。阻碍快速反馈的是代码间的依赖。解依赖1、弄清哪些依赖会成为拦路石方法:试着在测试用具中使用该类,所遇到的几乎所有问题都会源于某个依赖。依赖倒置原则...
2022-04-30 23:02:56
301
原创 时间紧迫下,代码修改的技能
新生方法思想:当需要往一个系统中添加特性且这个特性可以用全新的代码来编写时,建议你将这些代码放在一个新的方法中,并在需要用到这个新功能的地方调用这一方法。你可能没法很容易地将这些调用点置于测试之下,但至少可以为新编写的那部分代码进行测试。实施步骤:(1)确定修改点。(2)如果修改可以在一个方法中的一处地方以单块连续的语句序列出现,那么在修改点插入一个方法调用,而被调用的就是我们下面要编写的、用于完成有关工作的新方法。(3)确定需要原方法中的哪些局部变量,并将它们作为实参传给新方法调用(4)确定
2022-04-30 22:44:06
334
原创 带着反馈工作,构建安全体系
前言常用的改动系统的方式:编辑并祈祷,先理解系统,仔细制定修改计划,修改局部,然后修改系统,最后验证修改的正确性覆盖并修改,先建立修改前的安全防护(构建全面的测试覆盖),确保糟糕的改动不会泄漏出去并感染到软件的其他部分,防护建立后,可以安心的修改,并能快速的检测出修改的好坏。通过测试验证正确性通过测试检测变化软件夹钳:固定住目标软件的大部分行为,只改动那些你真正想要改动的地方。单元测试由一组独立的测试构成,其中每个测试针对一个单独的软件组件。这里组件是一个系统的最为“原子”的行为
2022-04-24 22:50:57
267
原创 软件修改不可避免
修改代码的起因四种:(1)添加新特性;新需求需要实现(添加新的功能或者添加新功能并替换之前的功能)(2)修正bug;(3)改善设计;(4)优化资源使用。添加新特性与修正bug对于程序员来说,可以统一看成是改变软件的行为。行为:行为对于软件来说是最重要的一样东西。软件的用户要依赖于软件的行为。用户喜欢我们添加行为(前提是新的行为确实是他们所需要的),然而如果我们改变或移除了他们原本所依赖的行为(引入bug),那么他们就不会再相信我们。行为与功能:行为包含功能、性能、可维护性等功能,更
2022-04-24 21:28:56
347
原创 C++编译器解析operator->机制及自锁定技术实现
机制说明编译器可以一个->表达式多次应用operator->,直到找到原始指针。例子好用的RAII手法template<typename T>struct LockingProxy{ LockingProxy(T* pObj) : pointee_ (pObj ) { pointee_->lock(); } ~LockingProxy() { pointee_->unlock(); } T* operator->() c
2022-04-19 23:12:04
685
原创 windows docker部署sonarqube
前言下载sonarqube镜像:https://hub.docker.com/_/sonarqube/下载postgresql镜像:https://hub.docker.com/_/postgres这里采用的是如下版本:sonarqube版本:sonarqube:7.9.4-communitypostgresql版本:postgres:9.6.19-alpine准备映射目录创建postgresql的目录D:\postgresql\data,用于存放数据库数据。创建sonarqube的目录:
2022-04-17 22:57:26
1374
原创 智能指针设计思想
简介smart pointers是一种C++对象,它提供operator->和 unary operator*,藉以模拟一般指针的行为。template<typename T>class SmartPtr{public: explicit SmartPtr(T* pointee) : pointee_(pointee); SmartPtr& operator=(const SmartPtr& other); ~SmartPtr(); T& op
2022-04-16 22:40:04
733
原创 C++单例实现实践
简介保证一个class只有一个实体,并为它提供一个全局访问点。种经过改进的全局变量。懒汉模式版本一class Singleton {public : static Singleton* instance() { if (!pInstance_) pInstance = new Singleton(); return pInstance_; }private : Singleton(); Singleton(const Singleton&); ~
2022-04-15 22:56:49
640
原创 内存管理——小型对象分配器实践输出
【注】此实践的基本思路来自《Modern C++ Design》四层结构实现Chunkstruct Chunk{ Chunk() : pData(nullptr), firstAvailableBlock_(0), blocksAvailable_(0) { } Chunk(size_t blockSize, unsigned char blocks) { pData = new unsigned char[blockSize * blocks]; firstAvailab
2022-04-12 22:55:56
1409
原创 C/C++通用内存分配器原理解析
C/C++分配器存在的问题1、分配速度慢,通常用于为大型对象(数百个或数千个bytes)分配内存2、存在一个管理内存的记忆池,常会耗用一部分内存资源,对于new分得得每一块内存,都会对其进行登记,而登记所需内存达4~32个bytes,对于分配小型对象,用于登记所需内存占比大,不适合用于分配小型对象的内存。内存分配器的工作方式内存分配器管理一个由raw bytes所组成的内存池,能够从池中分配任意大小的内存区块。管理内存需要的簿记结构,内存控制块:struct MemControlBlock {
2022-04-09 22:02:21
1463
原创 架构演进简介
1、命令查询职责分离模式(Command Query Responsibility Segregation,CQRS)读与写分离2、六边形架构分层:内部和外部3、洋葱架构(Onion Architecture)分离:基础设施;业务应用 外层依赖内层。 内层对外层无感知。4、COLA架构(面向对象分层架构)左边:分层架构右边:COLA分层架构 规则设计:“一个应用至少要有3个组件:应用层、领域层和基础实施层。”...
2022-04-01 23:43:13
178
原创 利用模板别名using实现TypeList
实现TypeListtemplate<typename T, typename U>struct TypeList{ using Head = T; using Tail = U;};背后的机制template参数可以是任何型别,包含该template的其他具现体。作用TypeList 内部没有任何数值:它们的实体是空的,不含任何状态,也未定义任何函数。执行期间t不带任何数值。它存在的理由只是为了携带型别信息。使用例子:using CharList = TypeLis
2022-03-26 23:38:05
710
原创 模板技术之编译期识别类型转换和继承性
问题如何识别两个模板参数T和U是否有继承关系?原理sizeof的威力sizeof可以用于任何表达式,在编译期评估表达式类型的大小。因此,sizeof可以感知重载、模板实例化、转换规则,或任何可发生于C++表达式身上的机制。识别类型转换能力机制运用sizeof和重载函数。1、函数重载提供选择分支提供两个重载函数:一个接受目标类型U——1号函数,另一个接受其它任何类型——2号函数。用户用类型T来调用这些函数,用户想知道T是否可以转换成U。如果1号函数被调用,说明T可以转换成U,否则无法转换成U。
2022-03-23 23:05:59
1186
原创 模板技术之型别转换实现Tag
型别映射问题:C++中不存在函数模板偏特化有时我们期待型别转换,输入一种数据类型,输出另一种数据类型,如下代码所示。template<typename T, typename U>T* Create(const U& arg){ return new T(arg);}有时,系统中存在旧代码,如Widget,需要两个参数才能构建出对象,第二个参数固定为-1,它的派生类则没有这种问题。由于函数模板特性限制,我们如下代码不符合规则。//非法代码template<t
2022-03-22 23:43:19
1139
原创 软件开发的本质
#软件开发的本质软件开发过程就是问题空间到解决方案空间的一个映射转化。“问题空间”就是系统要解决的“领域”问题”“可以简单理解为一个领域就对应一个问题空间,是一个特定范围边界内的业务需求的总和。”“领域模型”就是“解决方案空间”,是针对特定领域里的关键事物及其关系的可视化表现,是为了准确定义需要解决问题而构造的抽象模型,是业务功能场景在软件系统里的映射转化,其目标是为软件系统的构建统一的认知。领域模型的作用:1、帮助分析理解复杂业务领域问题,描述业务中涉及的实体及其相互之间的关系,是需求分析
2022-03-20 23:06:16
1043
原创 template技术之数字型别化实现编译期分派工作
数字型别化template<int v>struct Int2Type{ enum { value = v };};作用: 根据引数所得的不同数值来产生不同型别。eg: Int2Type<1>与Int2Type<2>是不同的数据类型,通过它可以在编译期选择不同数据类型,即编译期的条件判断。使用场景需满足以下两个条件:1、有必要根据某个编译期常数调用一个或数个不同的函数。2、有必要在编译期实施“分派”( dispatch) 。例子选择函数temp
2022-03-20 00:03:21
113
原创 C++局部类的一种使用场景
局部类局部类的限制local class不能定义static成员变量,也不能访问non-static局部变量。使用场景例子:适配器class Interface{public: virtual void fun () = 0;};template <class T, class P>Interface* MakeAdapter(const T& obj, const P& arg ){ class Local : public Interface {
2022-03-19 23:39:24
554
原创 技术之编译器检查
编译器检查特点:静态类型检查可定制类型错误消息例子:实现安全转型的函数,并确保较大型别不能转换成较小型别。迭代一template <typename To, typename From>To safe_reinterpret_cast(From sfrom){ assert(sizeof(From) < sizeof(To)); return reinterpret_cast<To>(from) ;}上述代码,会在执行期进行断言。迭代二 期待编译
2022-03-18 23:41:17
787
原创 template应用之Policies和Policy Classes
Policies和Policy Classes什么是Policy?Policy定义一个class或class template的接口,该接口由内隐型别定义( inner type definition) 、成员函数和成员变量之一或全部组成。例子声明Policy:policy_Create()可以理解为一种语法约束:要有Create()接口Create()返回值必须是T*template<typename Policy>struct Creator{ explicit Cr
2022-03-14 23:06:38
889
原创 多重继承与template结合增强设计
多重继承优点有助于产生更富弹性的设计,扩展性好具备封装性缺点缺乏技术(Mechanics ),仅仅只是将被组合的base classes结合在一起并建立一组用来访问其成员的简单规则缺乏型别信息(Type infornation),Based classes并没有足够的型别信息来继续完成它们的工作缺乏弹性的数据处理,base classes实作之各种行为必须操作相同的数据。这意味着他们必须虚继承一个持有该数据的base class。由于总是由user classes继承librar
2022-03-13 12:42:25
392
原创 对设计的一些理解
软件设计所谓软件设计就是解域空间( solution space)中的一道选择题。设计没有唯一性专业软件设计师知道什么可以有效运作,什么不可以。任何设计结构上的问题,都有许多合适的解法,然而它们各有不同规格并且各有优缺点。对眼前有益的问题可能适合也可能不适合。白板上可接受的方案,不一定真有实用价值。如何灵活组合?组合,富有弹性的组合系统架构基本原则主要基本原则是:以“设计”实现某些“原则”( axioms),例如你不能产生两个 Singleton对象或产生一个"disjoin
2022-03-12 23:23:58
401
原创 2021年阅读清单
用普通的话来说,这个咒语就是——阿巴拉卡达巴拉,芝麻开门,而且还有另外的东西——在一个故事里的咒语在另一故事里就不灵了。真正的魔力在于知道哪个咒语有用,在什么时候。用于做什么。其诀窍就在于学会有关的诀窍。 而这些咒语也是用我们的字母表里的字母拼出来的,这个字母表中不过是几十个可以用笔画出来的弯弯曲线。这就是最关键的!而那些珍宝也是如此,如果我们能将它们拿到手中的话!这就像是说,就像通向珍宝的钥匙就是珍宝! ...
2022-02-12 22:02:55
359
原创 试用std::once_flag和std::call_once保护数据只一次初始化
1、once_flag源码struct once_flag { private: typedef __gthread_once_t __native_type; __native_type _M_once = __GTHREAD_ONCE_INIT; public: /// Constructor constexpr once_flag() noexcept = default; /// Deleted copy constructor o
2022-01-10 22:59:12
703
原创 实现线程安全栈Stack
实现线程安全栈Stack封装stack,削减接口采用栈管理内存分配Stack实现#pragma once#include <exception>#include <memory>#include <stack>#include <mutex>struct EmptyStack : std::exception{ const char* what() const noexcept { return "t
2022-01-09 13:47:48
3323
原创 std::thread使用注意资源回收问题
一、线程1、启动线程存在的固有开销1. OS分配内核资源、堆栈空间2. 将线程加入调度器2、每个线程都需要一份独立的堆栈空间对于32位系统,一个线程占用1MB的栈空间3、线程间的任务调度,OS需要做上下文切换因此,1. 线程启动后,需要关注其销毁2. 系统资源有些,需要考虑启动线程的数量是否合适二、thread使用问题1、启动线程,主线程抛异常,异常退出例子:#include <iostream>#include <thread>using namesp
2021-10-04 11:35:19
2348
超新星纪元
2019-04-07
ORACLE数据库sql语言、函数及常用命令
2018-09-01
protobuf-master
2018-08-05
node.js开发实战详解.pdf
2017-08-26
有必要存在架构师的职位吗?
2022-03-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人