自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 Docker image with NodeJS

根据项目需要,我需要创建一个NodeJS的docker image, 就是创建一个微服务放到公司统一的云服务里面,以便其他人可以调用服务的接口,简单总结一下创建Docker image的过程:1.安装Docker Desktop on windows,具体可以参考。 通过网站可以查询怎么去下载安装该软件,但是我们在安装的时候要注意自己的windows系统是什么系统,不同的系统版本安装的时候要注意,比如支持wsl2的系统,会希望默认用wsl的方式运行docker,这样performance...

2021-06-22 11:26:53 350

原创 WSL2 部署K3S

最近有个全新的云项目,没有什么经验,在开发的过程中使用K3S和WSL2来进行相应的开发和测试,从而能够在开发过程中发现其中的一些问题,不至于在上云后才发现的问题。

2021-06-07 15:49:01 1838 1

原创 使用pkg编译打包nodejs程序成执行文件

NodeJS学习使用过的童鞋们都知道,可以利用V8来解析运行javascript程序, 我们在写一个server(一般都是使用NodeJS建立http/https server), 如果是云平台,都会直接把js代码上传上去,因为云平台的账户都是自己的,那么客户端的用户是看不见server的code的,那么我们一般的应用server呢?比如你需要把程序安装在客户那边的时候,你的javascript code需要保密吧?同时为了运行javascript代码,我们需要安装node, 而node程序有很多版本,怎么

2021-01-06 12:40:11 3220

原创 使用ffi-napi和NodeJS Buffer创建NodeJs addon

创建NodeJS AddOn的方式很多,在NodeJS开发出c/c++ addon with NAPI之后,大家基本上都用NAPI写addon了,最基本的原因就是NAPI可以脱离v8修改的依赖,NAPI对v8中的api进行了封装,不同版本的Node会自动适用v8底层的API变化。node-ffi-napi是一个开源的module,该模块内部通过nodejs napi加载我们自己写的dll中输出的函数(输出函数必须是extern 'c'的),由于该模块在内部使用了napi,所以我们在下载该模块的时候,会自

2020-12-04 09:23:54 2695

原创 使用Self-Signed Certificate构建HTTPS服务

HTTPS我们知道是比HTTP安全的协议,传输过程中,客户端和服务端都对对方进行了安全确认,并且传输的数据进行了加密,保证数据的完整性,防止传输过程中,中间有人对数据进行修改。HTTPS和HTTP都是应用层的协议,监听端口都是走tcp协议,只不过应用处理是走的HTTPS/HTTP。所以我们在监听之前要设置好处理数据用什么协议。要做HTTPS的服务器,最基本的一条就是需要SSL证书,申请证书可能是比较麻烦的事情,也需要花钱,或者每次都自动申请免费的证书,但是在开发阶段的话,我们可以用openssl自己

2020-08-20 16:17:13 4276

原创 TypeScript中的声明文件(.d.ts)

我们知道,Typescript是微软开发的语言,主要是为了自动帮助大家类型检查以及更好的使用面向对象,让使用面向对象开发的人员可以更好的理解Javascript,当然在实际开发过程中TypeScript还是会编译为Javascript,这样才会正常运行,编译的时候,会进行类型检查。由于Javascrtipt解释型语言的特性,每个相同类型的对象可以有不同的属性,但是TypeScript在编译的过程中可以实现类型检查,开发过程中进行类型提示,提高开发人员的开发效率。我们新的project一般都会用Typ

2020-08-17 17:51:30 3411

原创 CEF 源码的编译

CEF是基于chrominum的开源framework,但是与chrominum不同的是,chrominum是针对于Chrome浏览器的开发的,CEF可以让其他的应用程序创建一个基于chrominum的浏览器。类似功能的还有Electron, chrominum现在已经成为流行的框架,里面的blink(webkit)作为render引擎来render页面,V8作为JavaScript引擎去解析JavaScript。CEF是用C &C++写的所以是跨平台的,从而产生的其他的很多project,..

2020-08-07 14:30:10 2309 1

原创 NodeJS中使用N-API(NODE-API)去调用已经存在的dll.

在之前的一篇文章中,介绍了编写NodeJS AddOn的三种方式,N-API已经是AddOn的未来,N-API摆脱了Node各个大版本引用的chrominumV8不一致导致的API修改的问题。在之前的文章中介绍了N-API是Node team自己维护的,N-API内部会做V8中api匹配的问题。下面用一个例子来学习写一个N-API来调用已经存在的dll.1.写一个dll利用机器上安装的vs2017(各个版本都可以),创建一个c++的动态链接库工程。在工程里创建一个接口文件InterfaceH..

2020-07-27 15:54:42 2313 1

原创 NodeJS 中使用native module - 不同方式介绍

写NodeJS程序的时候,往往不会全是JS的,不管是什么原因需要利用原来的DLL去实现一些特定的业务,那么NodeJS怎么去实现对DLL的调用呢?NodeJS对模块的调用都是通过require("module")来实现的,那么我们就需要编写一个binary可以通过require("")加载的。要想编译成.node文件,那就必须说node-gyp tool了。node-gyp 是基于 GY...

2020-07-27 09:19:14 2106

原创 NodeJs 多线程(worker_threads)

Javascript的运行,我们知道是单线程的,目的是为了解决内存冲突等的问题,同时单线程的设计也方便问题的查找和解决,在浏览器端,单线程基本都可以满足,但是在NodeJS服务端的话,如果有大规模的计算或者耗时业务流程就会堵塞后面的请求,比如有一个客户端请求,需要从数据库里面取出数据,然后进行各种计算,一般计算过程都是用JS写的,如果这个计算过程很耗时(假如需要10s),就会导致后面的请求得不到响应,之前我们的做法就是N-API写一个C++的addon去开辟新线程去计算或者直接用模块child-proces

2020-07-15 08:50:58 4555

原创 正确理解网络端口

随着网络速度越来越快,费用越来越低,很多产品已经面向网络编程,不管是web服务器, socket通信,网络数据库等等,在我们开发过程中,很少注意的一个问题,就是端口,一般如果作为开发人员的话,服务端都会注意选择一个端口,但是客户端一般都不会注意着个问题,最近查了一下端口的问题,来分享一下这个问题。一网络结构图这是一张7层的网络结构图,不管是5层或者7层,基本都差不多,只是解释不同。在网络传输的过程中,都是端到端的数据传输,不管是UDP还是TCP,那么什么是端到端呢,可以这么认为,我们知道IP

2020-06-10 14:03:38 1577

原创 Sqlite: 在C#程序中的应用

Sqlite简单介绍:1. 是一种关系型数据库,它是open source,不是open contribute的,也就是说所有人都可以拿到source code,但是只有相关的人员可以上传code,下载到本地之后,可以修改code自己是使用,但是不能上传,有专门的人维护,就是质量有保证。2. 另外一个特色是,区别于其他的关系型数据库,它是跟应用程序一起的,不需要独立运行的服务器,只是对当...

2020-03-17 14:00:13 418

原创 Electron 开发应用程序

Electron结合了Chromium和NodeJS,使得用JS开发应用程序成为可能,比如微软的Visual Studio Code就是用Electron开发的。Electron利用了Chromium的前端显示功能(解析和显示HTML以及 javascript code)同时利用NodeJS可以访问本地文件的功能来解决浏览器本身的一些限制。我们在用Electron做一些开发的时候,前端基本没...

2019-12-30 14:10:41 1047

原创 C++11: using 的使用

using关键字的三种用法1.指定命名空间,比如,在C++编码学习之初常用的 using namespace std;2.在子类中引用父类中的变量,这种用法比较特殊,class T5Base {public: T5Base() :value(55) {} virtual ~T5Base() {} void test1() { cout <<...

2019-07-12 10:15:50 328

原创 c++: #define中的#和##

#define指令将标识符定义为宏,即指示编译器将其后出现的所有标识符都替换为替换列表,而它也可以被进一步处理。若该标识符已被定义为任何类型的宏,则除非这些定义都相同,否则程序非良构,比如:#ifndefINCLUDE_ //一般用于防止inlcude的时候重复定义声明类型#define INCLUDE_// 做一些声明之类的,#endif当然也会定义一些宏去代替一些...

2019-07-12 10:07:16 1718

原创 c++11: 右值引用(right value reference)

在c++ 11之前,我们所说的引用只有左值引用,现在我们通常所说的引用也是左值引用,但是准确一点说,c++11之后,除了左值引用,还有右值引用。在之前所谓左值就是表达式左边的值,所谓右值就是表达式右边的值,比如:int a = 10;//其中 a就是左值, 10就是右值int b = a;//其中 b是左值,a 是右值在c++11之后,又有了明确的定义:L-value(左值...

2019-07-11 16:32:48 543

原创 MUI: 程序本地化(Localization)的问题

程序本地化的方式是为了让程序可以在不同的操作操作系统上,显示的字符串语言自适应(德文系统上显示的字符串为德文,英文系统上显示的字符串为英文)。但是有一些特殊情况需要单独处理,比如你应用程序没有做本地化处理,而应用程序调用的DLL做的本地化,那怎么办呢?这种情况下,你应用程序本身界面上的字符串是没有本地化处理的(比如是中文),但是由于程序运行在英文系统上,DLL内的字符串显示或者返回的字符串(Lo...

2019-06-26 07:58:35 454

转载 windbg: .Net 程序员的dump 分析

Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。在 Windows 系统上, dump 文件分为内核 dump 和用户态 dump 两种。前者一般用来分析内核相关的问题,比如驱动程序;后者一般用来分析用户态程序的问题。WinDBG不是专门用于调试.Net程序的工具,它更偏向于底层,可用于内核和驱动调试。进行普通的.Net程序调试还是使用微软专为.Net开发的调...

2019-05-16 16:24:47 822

原创 Javascript for-in for-of

for-of是ES6引进的新语法,for-in循环是遍历对象的属性,for-of循环是遍历实现iterator接口的成员Object.prototype.objCustom = function () {}; Array.prototype.arrCustom = function () {};let iterable = [3, 5, 7];iterable.foo = "hell...

2019-04-12 16:03:14 587

转载 非用户管理员权限下对系统目录的读写-virtual store

win7 下,个人的配置文件会自动保存在C:/Users/***XX/AppData/Local/VirtualStore/Program Files/MyApp/***.ini里,而原先安装在C:/Program Files/MyApp/***.ini则没有改变,产生这样的转存原理如下: 这个当权限不够时,保证兼容性的做法。比如往program files 或某些系统目录要写入东西,会...

2019-02-20 15:32:17 1076

转载 C# 写COM组件以及组件的调用(Visual Studio 2010)

1. 新建lib2. 将Class1.cs改为我们想要的名字(例如:MyClass.cs)问是否同时给类改名,确定3. 修改Properties目录下面的AssemblyInfo.csComVisible属性设置为true 原来默认值:改成如下:4. 项目-&gt;MyLib属性切换到“生成”选项卡,在底部位置,勾选“为COM互操作注册”,编...

2018-12-28 10:03:45 10824 1

翻译 COM组件以及套间

COM组件的特点:1. COM组件是以WIN32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码组成。2. COM组件是遵循COM规范编写的   COM组件是一些小的二进制可执行文件3. COM组件可以给应用程序、操作系统以及其他组件提供服务4. 自定义的COM组件可以在运行时刻同其他组件连接起来构成某个应用程序5. COM组件可以动态的插入或卸出应用6. COM组件必须...

2018-12-24 16:43:59 1077

转载 JavaScript Set 和weakset

在ES6, 增加了Set和WeakSet两个集合,简单总结一下使用方法以及他们的区别1.Set是一个新的数据结构,类似于数组,不过里面的数值是不能重复的Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。下面先介绍四个操作方法。add(value):添加某个值,返回 Set 结构本身。 delete(value):删除某个值,返回一个布尔值,表示删除是否...

2018-12-13 10:23:12 273

原创 NodeJS - Redis

redis是一种内存数据库, 以key-value的方式存储。同时把数据进行服务本地存储,key 一般都是字符串,当然也可以有其他个数,比如数字,value的形式有很多。比如list, hash, string等。具体可以参考指南。本文主要总结自己一下在NodeJS下使用Redis的经验,1. 安装redis由于Redis官网不提供windows版本,redis 可以从这网站上直接下载...

2018-11-16 09:57:10 393

原创 Nodejs-Cookie的设置

在web开发的过程中 cookie 肯定需要接触的,一个典型的应用是关于用户登录的,如果用户登录之后,再关闭,下次打开该网页已经自动登录,这样就可以利用服务器端发送cookie到客户端,再客户端存下来就可以了,当然也可以客户端自己存储登录信息到cookie,然后再打开网页的时候,自动发送保存的用户信息到服务端进行验证,具体cookie用来干什么的,可以自己google一下。目前我自己使用了两种...

2018-11-15 16:10:15 3525

原创 WebSocket 前端后端(nodejs)

WebSocket是区别于HTTP/HTTPS的另外一种协议,目的是实现后端主动向前端发送数据,是一种TCP的连接。1. WebSocket的前后端握手WebSocket协议在握手连接的时候,走的是HTTP/HTTPS协议的upgrade请求,但是在握手之后的数据传输走的就是WebSocket协议了。2. WebSocket前端简单代码var ws = new WebSocket...

2018-11-14 17:36:46 2767

原创 C# async await task 的学习

async await 是 .net framework 4.5新加的,主要是为了解决异步执行的问题,他们是两个关键字,使用 async 修饰符可将方法、lambda 表达式或匿名方法指定为异步,在用async修饰符的表达式/方法的返回值必须是 void, Task或者Task&lt;T&gt;,T是返回值的类型。如果没有返回值则用Task/void。async修饰表达式/方法是在调用线程的时...

2018-08-01 15:01:38 7877

原创 Windbg 调试 managed code 常用命令

本文主要记录一些我们在debug 托管代码dumpfile的时候常用命令。1. lm 命令在windbg打开dumpfile之后,我们可以利用lm命令去列出当前加载的dll,如果想详细查看某个dll的信息,比如aaa.dll,那么可以利用命令lmv maaa去显示aaa的详细信息,包括版本信息等等。2. k(b)命令可以利用该命令列出当前线程的callstack,想列出所有线程的call stac...

2018-05-18 15:46:02 266

原创 Windbg调试SOS.DLL和CLR 不匹配问题

我们在用windbg调试客户发来的dump文件的时候,如果不是相同的环境的话,很容易出现这个现象,简单的说就是程序运行机器上的CLR与当前开发调试人员机器上的CLR是不同的版本,从而导致开发人员机器上的SOS.dll与dump file中要求的SOS.dll不一样(比如应用程序要求是.net framework 4.6,所以客户机安装的就是.net 4.6,但是开发人员机器上安装的是.net 4....

2018-05-18 15:45:45 2125

原创 Windbg 的选取

windbg作为调试器的一种,是非常方便的,可以在没有visual studio 等开发工具的情况下调试并进行问题追踪,并且利用该工具可以进行dump file的抓取。一般情况下客户在运行我们开发的应用程序的时候,机器上是没有安装visual studio 的,他们也一般不运行安装开发环境,如果要进行问题跟踪,可以利用windbg,该工具是免安装的,可以从其他机器上copy到目标机器上,然后att...

2018-05-18 15:45:34 201

翻译 在visual studio version 11和.net framework 4.5之后的版本 关于any cpu的设置

在最新的visual studio 中,我们在project的property界面中,在设置build的platform target的时候,默认为any cpu, 在改选项之后还有子选项,perfer x86.那么platform target这个选项的实际意义是什么呢?如果platform target是x86,那么程序可以在x86和x64上运行,但是在实际运行时,是按照32bit程序运行,I...

2018-05-18 15:45:16 698

原创 COM组件调试

COM技术虽然已经不被Microsoft推荐,我还是简单记录一下怎样调试COM组件。跟调试普通的dll差不多,有一点区别。1. 创建COM组件现在利用VS去创建COM组件是很容易的,可以利用C++/VC++ 或者C#,淡然C#去编写COM组件还是比较少的,本例用VC++编写。2. 创建客户端调用COM组件。我们在创建COM组件之后,往往是为了给第三方去调用的,这个时候客户端没有...

2018-03-26 15:10:42 2915

转载 Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI

这里主要用的方法是JNI。在网上查资料时看到很多人说用JNI非常的复杂,不仅要看很多的文档,而且要非常熟悉C/C++编程。恐怕有很多人在看到诸如此类的评论时已经决定绕道用其他方法了。但是,假如你要实现的功能并不复杂(简单的参数传递,获取返回值等等),我还是支持使用这个方法的。Java Native Interface,简称JNI,是Java平台的一部分,可用于让Java和其他语言编写的代码

2017-12-19 16:40:40 500

翻译 在Java程序中加载Native/Dynamic DLL

虽然很少或者说Java本身也不推荐用Java去调用Native/Dynamic DLL,但是Java还是提供了该功能,以方便开发人员可以利用Navtive code去更好的实现Java不能实现的功能(比如效率原因或者很多老的代码)。有好几种方法可以让JAVA在运行过程中找到并加载DLL:1. Call System.load去加载dll (绝对路径)import com.chilkat

2017-12-19 09:14:25 961

原创 Java 调用Native Method 和Library

Java 调用Native Method和Libary,就会丢失Java自己的一些属性,比如夸平台运行,除非你确认必须调用Native Method 和Library,否则尽量别用,我们通常这样用的原因是之前我们写了很多代码,希望重用,或者是因为执行速度的原因我们需要利用Native code去运行特定的功能。1. 调用Native Method和Library的例子,public cla

2017-12-18 10:05:03 794

原创 Java 多线程编程

多线程是提高程序运行效率的一种方式,就是让多个互相独立的任务同时运行,他们之间没有相互的依赖(相对的),各线程是并行运行的。多线程不是没有缺陷的,现在的很多操作系统启动的时候就是多线程,但是他们需要做一些元素的基本保护,因为很多内容不是线程安全的,需要开发者去保证他们的线程安全,这就是线程之间的数据共享的问题。多线程的问题与编程语言无关,不管是什么语言,只要是支持多线程(基本所有的编程语言都支

2017-12-13 15:07:05 174

原创 利用Eclipse发布Java程序

Eclipse作为重要的Java编译器,利用其发布程序是其中必要的一环。在Eclipse中新建Java project,然后增加类,并含有main函数,作为启动类。在main函数中简单增加如下代码利用Eclipse调试程序,在Console window中输出 my third test!,则程序编译通过.右键 project,选中menu - export,会弹出如下窗口

2017-12-12 10:16:00 4160

原创 利用Eclipse 引用 jar包的几种方法

在学习Java的时候,我们都需要编译器,而Eclipse是其中广泛应用的编译器,下面是个人在学习Java的过程中利用Eclipse去引用其他的lib和发布程序的一点心得。1,引用其他的lib(本例引用的lib为  a.Jar),启动Eclipse,新建Java project,添加新类 MyTest.java,并在里面加入main 函数,右键新建的project,选择build path,

2017-12-12 09:46:14 6914

转载 软件架构MVC, MVP, MVVM

复杂的软件必须有清晰合理的架构,否则无法开发和维护。MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛的应用。它本身很容易理解,但是要讲清楚,它与衍生的MVP和MVVM架构的区别就不容易了,但是通过几张图片可以很容易对架构的基本原理进行理解。1.     MVCMVC模式的意思是,软件分为三个部分,Model,View,Controller

2017-09-29 08:42:46 373

原创 MEF 学习笔记

1. MEF是什么  MEF(Managed Extensibility Framework), 顾名思义,它是Framework 4.0下的应用框架, 主要是用于创建一种轻量级,有很好扩展性的应用程序,它可以让客户端在不需要任何引用情况下发现和使用新的扩展方法,当然也可以使扩展库的开发人员很容易的发布新的扩展,避免很强的依赖,当然它不是第一种专门为应用程序的扩展性而设计的一种框架,但是它有自己的...

2017-09-21 07:55:27 388

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除