精华内容
下载资源
问答
  • 问题:如图所示: 图中大部分电阻值都是都是DNP DNP是英文(Do Not Populate)的意思,译为...实际使用过程中,在PCB上会留有空焊盘,可以做测试引脚用,或者在信号质量不好时,加焊下拉电阻,调整信号质量。...

    问题:如图所示:
    这里写图片描述

    图中大部分电阻值都是都是DNP

    DNP是英文(Do Not Populate)的意思,译为“不焊接”。
    实际使用过程中,在PCB上会留有空焊盘,可以做测试引脚用,或者在信号质量不好时,加焊下拉电阻,调整信号质量。

    展开全文
  • 各位前辈希望指教.... 最近自学C++到构造函数的地方,照书上打了一段代码,发现神奇的不行 代码的部分是这样的 class Sales_data ...Sales_data不是类的非静态数据成员是什么意思 各位前辈有空的指教下 谢谢
  • 今天刚好有空,跟大家聊聊如何学好算法进大厂。 前两天一个读者和我说,他坚持刷算法题2个月,薪资翻番去了他梦寐以求的大厂,期间面字节跳动还遇到了原题…其实据我所知目前国内的大厂和一些独角兽,已经越来越效仿...

    前言

    今天刚好有空,跟大家聊聊如何学好算法进大厂。

    前两天一个读者和我说,他坚持刷算法题2个月,薪资翻番去了他梦寐以求的大厂,期间面字节跳动还遇到了原题…其实据我所知目前国内的大厂和一些独角兽,已经越来越效仿硅谷公司的做法,通过编程定题面试,来考察数据结构和算法的扎实程度。

    以我的经验来说,**对于新手来说,扎实的掌握一门语言是其一,其二就是要有基本的算法能力,这个非常重要。对于进阶的用户,更多技术栈的掌握就是必须的了。另外,还需要你学习高阶算法,掌握这些技术栈匹配的算法技能。**现在很多大厂技术面试的要求是:技术要好,计算机基础扎实,熟练掌握算法和数据结构,语言不重要,熟练度很重要。每一轮技术面试不只考算法,但一定会考算法。

    为什么这几年算法成了其中必要的一个环节?因为考察算法的核心就是,看候选人是不是足够聪明!很多大厂的算法面试题一般对应的是 LeetCode 中级模式,一般会直接让你说思路或上手写代码。

    要通过面试,你肯定得花时间好好准备。但是只靠刷题去提升算法能力,进度太慢,而且还容易抓不住重点很难坚持,并且没有完整的学习体系,也没人指导,导致最后的结果就是一知半解,浪费了大量的时间成本。

    主备同步的实现原理

    我们先来了解一下主备同步的原理,下面以一个update语句来介绍主库与备库间是如何进行同步的。

    主备同步流程图

    上图是一个update语句在节点A执行,然后同步到节点B的完整流程图,具体步骤有:

    1. 主库接受到客户端发送的一条update语句,执行内部事务逻辑,同时写binlog。
    2. 备库通过 change master 命令,设置主库的IP、端口、用户名和密码,以及要从哪个位置开始请求 binlog。这个位置包含文件名和偏移量。
    3. 在备库上执行start slave命令,启动两个线程 io_thread 和 sql_thread,其中 io_thread 负责与主机进行连接。
    4. 主库校验完用户名和密码,按照接收到的位置去读取binlog,发给备库。
    5. 备库接收到binlog后,写到本地文件(relay log,中转文件)。
    6. 备库读取中转文件,解析出命令,然后执行。

    主备同步的工作原理其实就是一个完全备份加上二进制日志备份的还原。不同的是这个二进制日志的还原操作基本上是实时的。

    备库通过两个线程来实现同步:

    • 一个是 I/O 线程,负责读取主库的二进制日志,并将其保存为中继日志。
    • 一个是 SQL 线程,负责执行中继日志。

    从上面的流程可以看出,主备同步的关键是binlog。

    常见的两种主备切换流程

    M-S结构

    M-S结构,两个节点,一个当主库、一个当备库,不允许两个节点互换角色。

    M-S结构

    在状态1中,客户端的读写都直接访问节点A,而节点B是A的备库,只是将A的更新都同步过来,到本地执行。这样可以保持节点B和A的数据是相同的。

    当需要切换的时候,就切成状态2。这时候客户端读写访问的都是节点B,而节点A是B的备库。

    双M结构

    双M结构,两个节点,一个当主库,一个当备库,允许两个节点互换角色。

    双M结构

    对比前面的M-S结构图,可以发现,双M结构和M-S结构,其实区别只是多了一条线,即节点A和B之间总是互为主备关系。这样在切换的时候就不用再修改主备关系。

    双M结构的循环复制问题

    在实际生产使用中,多数情况是使用双M结构的。但是,双M结构还有一个问题需要解决。

    业务逻辑在节点A执行更新,会生成binlog并同步到节点B。节点B同步完成后,也会生成binlog。(log_slave_updates设置为on,表示备库也会生成binlog)。

    当节点A同时也是节点B的备库时,节点B的binlog也会发送给节点A,造成循环复制。

    解决办法:

    • 设置节点的server-id,必须不同,不然不允许设置为主备结构
    • 备库在接到binlog后重放时,会记录原记录相同的server-id,即谁产生即为谁的。
    • 每个节点在接受binlog时,会判断server-id,如果是自己的就丢掉。

    解决后的流程:

    1. 业务逻辑在节点A执行更新,会生成带有节点A的server-id的binlog。
    2. 节点B接受到节点A发过来的binlog,并执行完成后,会生成带有节点A的server-id的binlog。
    3. 节点A接受到binlog后,发现是自己的,就丢掉。死循环就在这里断掉了。

    最后

    2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。

    更多JVM面试整理:

    l3rkBVW-1621042878403)]

    更多JVM面试整理:

    [外链图片转存中…(img-a6hA7698-1621042878405)]

    点击这里免费下载“百万级”「JVM笔记」

    展开全文
  • 近期有空研究了一下DLL和HOOK的一些知识,故此做下笔记。下面以add,sub两函数和Point类为例来解释Dll与Hook的区别。 简单的说一个是勾子,一个是动态库注入,hook起到拦截的作用,dll的使用就很常见了。任何函数的运行...

    近期有空研究了一下DLL和HOOK的一些知识,故此做下笔记。下面以add,sub两函数和Point类为例来解释Dll与Hook的区别。

     简单的说一个是勾子,一个是动态库注入,hook起到拦截的作用,dll的使用就很常见了。任何函数的运行都需要动态或静态库。

    一,Dll的简单使用

          使用 一个DLL,一般需要另外两个文件.H和.LIB。.H文件或.LIB文件。.H文件可用于使用.DLL的客户或是.DLL文件本身,其作用编译时期。.LIB文件是一个引入苦,用于客户程序,作用在链接时期。.DLL文件当然作用于运行时期了。

        打开VS2008,选择Win32,DLL空项目。新建一个DLL.CPP和DLL.H文件。

    //DLL.H
    #ifdef DLL_API
    #else
    #define DLL_API  _declspec(dllimport)
    #endif
    
    DLL1_API int add(int a,int b);
    DLL1_API int subtract(int a,int b);
    
    class DLL1_API Point
    {
    public:
        void output(int x,int y);
    };
    
    //DLL.CPP
    #define DLL_API  _declspec(dllexport)
    #include "Dll.h"
    #include <stdio.h>
    
    int  add(int a,int b)
    {
    	return a+b;
    }
    
    int  subtract(int a,int b)
    {
    	return a-b;
    }
    
    void Point::output(int x,int y)
    {
    	printf("x = %d,y = %d",x,y);
    }
    
    //Dll应用端
    #include <iostream>
    #include "Dll.h"
    using namespace std;
    //加载动态链接库
    #pragma comment(lib,"Dll.lib")
    
    int main()
    {
    	cout<<add(2,3);
    	Point p;
    	p.output(2,3);
    }
    

       在C++中对函数名字的解析和C语言中方式不一样,因为C++支持重载的缘故,为了不同的语言都可以使用同一个DLL,我可以这样:

    在.H文件里更改为:#define DLL_API extern "C" _declspec(dllimport)

    在.CPP文件里更正为:#define DLL_API extern "C" _declspec(dllexport)

    注意:C一定要大写,这样导出函数名是以C命名的方式。


        在不同的不同的语言中,函数的调用规则是不一样的,在C语言中式C调用规则,在Dephi中是PASCAL(标准调用)调用规则中,为了不同的语言可以使用同一个DLL,我们需要更改函数的调用规则,例如:

    .H文件中:DLL1_API int _stdcall add(int a,int b);

    .CPP文件中实现add实现时也应加入_stdcall。

    但这样会更改导出的函数名,这又与extern "C"向冲突。

     

    解决上述文件的方式是是用.DEF文件,在vs2008中,可以新建一个,格式如下:

    LIBRARY “Dll”

    EXPORTS
    add
    subtract

    使用动态DLL,有两种方式,隐式调用和显示调用。

    #pragma comment(lib,"Dll.lib")
    这是隐式的,程序启动时,把所有的函数都映射进去,但有时我们只需要一个,不必要这么多,这是使用显示调用。

    使用显示调用,要使用以下两个函数:

    1.HMODULE WINAPI LoadLibrary(LPCTSTR lpFileName);
    2.FARPROC WINAPI GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
     

    二,Hook的简单使用

    先看一个函数:

    HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod, DWORD dwThreadId);

    参数意义:

    • idHook参数可以取如下常量:
    • WH_CALLWNDPROC     //窗口钩子,当系统向目标窗口发送消息时将触发此钩子
    • WH_CALLWNDPROCRET     //窗口钩子,当窗口处理完消息后将触发此钩子
    • WH_CBT   //当Windows激活、产生、释放(关闭)、最小化、最大化或改变窗口时都将触发此事件
    • WH_DEBUG    //调试钩子
    • WH_GETMESSAGE    //当往消息队列中增加一个消息时将触发此钩子
    • WH_JOURNALPLAYBACK     //回放钩子,可以用于播放已记录的鼠标和键盘的操作
    • WH_JOURNALRECORD     //记录钩子,可以用于记录鼠标和键盘的操作,木马程序可以使用此钩子窃取受控方在屏幕中敲入的密码
    • WH_KEYBOARD     //当敲击键盘时将触发此钩子
    • WH_MOUSE    //当有鼠标操作时将触发此钩子
    • WH_MSGFILTER   //消息过滤钩子
    • WH_SHELL   //Shell钩子
    • WH_SYSMSGFILTER    //系统消息过滤钩子

    lpfn参数:是一钩子过程,不同的钩子有不同的钩子过程。如果是全局钩子,该函数在DLL中,如果不是在当前进程中。
    hMod参数:指向DLL的句柄,如果dwThreadId是当前进程的一个线程ID并且钩子处理函数在当前进程中,hMod一定要为NULL。
    dwThreadId参数:如果是全局钩子该参数就为0,如果不是就是当前进程的一个线程ID

     

    2.卸载一个HOOL

    BOOL UnhookWindowsHookEx(HHOOK hhk);

    例子1:非全局钩子

    // InnerHookDlg.cpp
    HHOOK g_hMouse;
    HWND g_hWnd=NULL;
    
    LRESULT CALLBACK MouseProc(
      int nCode,      // hook code
      WPARAM wParam,  // message identifier
      LPARAM lParam   // mouse coordinates
    )
    {
    	return 1;
    }
    
    LRESULT CALLBACK KeyboardProc(
      int code,       // hook code
      WPARAM wParam,  // virtual-key code
      LPARAM lParam   // keystroke-message information
    )
    {
    	//if(VK_SPACE==wParam || VK_RETURN==wParam)
             //Alt+F4
    	/*if(VK_F4==wParam && (1==(lParam>>29 & 1)))
    		return 1;
    	else
    		return CallNextHookEx(g_hKeyboard,code,wParam,lParam);*/
            
            //按F2退出程序
    	if(VK_F2==wParam)
    	{
    		::SendMessage(g_hWnd,WM_CLOSE,0,0);
    		UnhookWindowsHookEx(g_hKeyboard);
    		UnhookWindowsHookEx(g_hMouse);
    	}
    	return 1;
    }
    
    
    BOOL CInnerHookDlg::OnInitDialog()
    {
    	//...............
    	g_hWnd=m_hWnd;
    	g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
    	g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());
    	return TRUE;
    }

    例子2:全局钩子

    //Hook.CPP
    
    #include <windows.h>
    
    HHOOK g_hMouse=NULL;
    HHOOK g_hKeyboard=NULL;
    
    //共享g_hWnd
    #pragma data_seg("MySec")
    HWND g_hWnd=NULL;
    #pragma data_seg()
    
    
    LRESULT CALLBACK MouseProc(
      int nCode,      // hook code
      WPARAM wParam,  // message identifier
      LPARAM lParam   // mouse coordinates
    )
    {
    	return 1;
    }
    
    LRESULT CALLBACK KeyboardProc(
      int code,       // hook code
      WPARAM wParam,  // virtual-key code
      LPARAM lParam   // keystroke-message information
    )
    {
    	if(VK_F2==wParam)
    	{
    		SendMessage(g_hWnd,WM_CLOSE,0,0);
    		UnhookWindowsHookEx(g_hMouse);
    		UnhookWindowsHookEx(g_hKeyboard);
    	}
    	return 1;
    }
    
    void SetHook(HWND hwnd)
    {
    	g_hWnd=hwnd;
    	g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);
    	g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
    }
    
    //.DEF
    LIBRARY Hook
    EXPORTS
    SetHook		@2
    SEGMENTS
    MySec	READ WRITE SHARED

    在.DEF文件中

    SetHook  @2

    意思是制定SetHook在DLL中的位置

    SEGMENTS

    MySec   READ WRITE SHARED

    意思共享在.DLL中的MySec。

     

    本文部分参考资料来自网络整理。仅供学习参考。

    展开全文
  • 一直都听别人说新三板,什么上市,以前根本不了解新三板是什么?直到今天有空在百度查了下,才对此有了些新的认知。  新三板最早发源于北京中关村,主要是一些相对高科技的企业。而之所以叫“新”三板,是因为还...
        一直都听别人说新三板,什么上市,以前根本不了解新三板是什么?直到今天有空在百度查了下,才对此有了些新的认知。
      新三板最早发源于北京中关村,主要是一些相对高科技的企业。而之所以叫“新”三板,是因为还存在一个老三板,主要是承载原STAQ、NET系统挂牌公司和退市企业的公司股权转让。
      2006年,中关村科技园区非上市股份公司进入代办转让系统进行股份报价转让,称为“新三板”。由于中关村的企业有限,因而当时的新三板成交量有限,交投极度不活跃。
      2012年,上海张江高新技术产业开发区、武汉东湖新技术产业开发区和天津滨海高新区加入新三板试点,至此新三板扩大到4个国家级高新园区,项目来源大大扩展。
      2013年底,证监会宣布新三板扩大到全国,对所有公司开放。2014年1月24日,新三板一次性挂牌285家,并累计达到621家挂牌企业,宣告了新三板市场正式成为一个全国性的证券交易市场。
      到2015年3月已有2100余家公司在新三板挂牌,从家数和总市值上来说已经较为庞大。
      新三板又称全国中小企业股份转让系统,是经国务院批准,依据证券法设立的全国性证券交易场所,也是第一家公司制证券交易所。全国中小企业股份转让系统有限责任公司为其运营机构,于2012年9月20日在国家工商总局注册,2013年1月16日正式揭牌运营,注册资本30亿元,注册地在北京。
      新三板定位于非上市股份公司股票公开转让和发行融资的市场平台,为公司提供股票交易、发行融资、并购重组等相关服务,为市场参与人提供信息、技术和培训服务。在这个平台上,具有代办系统主办券商业务资格的证券公司采用电子交易方式,为非上市股份有限公司提供规范股份转让服务。
    展开全文
  • 最近有空可以让我静下心来看看各种代码,function与感叹号的频繁出现,让我回想起2个月前我回杭州最后参加团队会议的时候,@西子剑影抛出的一样的问题:如果在function之前加上感叹号 (!) 会怎么样?比如下面的代码...
  • Unity动画系统详解8:IK是什么

    千次阅读 2020-07-19 09:48:20
    摘要:IK是Inverse Kinematic的缩写,也就是反向动力学。...“IK你已经明白是什么意思了吧?” “IK是Inverse Kinematic的缩写,也就是反向动力学。是根据骨骼的终节点来推算其他父节点的位置的一种方法。比如
  • sql语句中as的用法和作用

    千次阅读 2017-11-29 13:58:56
    最近做项目中,偶然发现在SQL语句中出现了as这个词,一直以来没怎么关注是什么意思,毕竟影响不大,今天有空,就在网上查了一些资料,大概有了一些的了解 我们的Sql语句在很多数据库中都是通用的,比如像Mysql...
  • 操作系统复习笔记

    千次阅读 2011-12-06 12:31:09
    1、进程的状态与进程控制块(pcb):至于进程的几种状态就不必说了,就是那几个就绪啊,阻塞啊,执行啊,挂起什么的,没意思。说说这个pcb吧,pcb的作用概括为一句话:pcb是进程存在的唯一标识。 pcb控制块中的信息...
  • 整好今天有空,统一给大家解释下pass是什么意思?和Iass、Sass之间有什么区别呢? 其实搞懂这个问题也不难,我们可以把云计算理解成一栋大楼,而这栋楼又可以分为顶楼、中间、低层三大块。那么我们就可以把Iass...
  • iaas paas saas三种云服务区别

    万次阅读 2016-11-09 18:50:31
    整好今天有空,统一给大家解释下pass是什么意思?和Iass、Sass之间有什么区别呢? 其实搞懂这个问题也不难,我们可以把云计算理解成一栋大楼,而这栋楼又可以分为顶楼、中间、低层三大块。那么我们就可以把Iass...
  • Iaas Paas Saas三种云服务区别

    千次阅读 2017-02-24 21:55:32
    整好今天有空,统一给大家解释下pass是什么意思?和Iass、Sass之间有什么区别呢? 其实搞懂这个问题也不难,我们可以把云计算理解成一栋大楼,而这栋楼又可以分为顶楼、中间、低层三大块。那么我们就可以把Iass...
  •  注意,这里,#号和问号之间不要有... 第二:超链接里面的href=#是什么意思?   就是空连接的意思,还没想好这个连接应该练到那里去。。或者是。这个连接所要连接的页面还没有写好。 来自:http://zhidao.baidu.c
  • 脏话

    2019-10-05 02:13:33
    今天和同学发短信,问我干什么呢,我当时在做...开始有一点点后悔,不过再想想,这本来就是我,原来我也常说脏话,但后来实在觉的没什么意思和内容也就改回来了.说的那些脏话也就不过是为了以牙还牙而已也没什么...
  • 积极响应号召,我也在...想了很久的用户名最终定位HEXLee,意思知道我名字的一定晓得是什么意思啦。 在新的博客里,我将记录我学习成长的足迹,并且与大家分享我学习成长的经验和成果,欢迎大家有空来坐坐!  ...
  • 代码很简单,主要自定了一个ViewPager的indicator,重点看一下ViewPager的onPageScrolled()里各个参数的意思,都是ViewPager与Fragment的典型用法,没做什么封装(挖坑),有需要的自己下载下来看一下就行,有空再来...
  • 用vc 制作一个对位图按钮进行对应的小程序,并将位图显示...意思是,打开程序窗口,点击上部的位图按钮,点哪个,哪个就会在窗口的主体区显示出来,一一对应,不知这种功能有什么用,放上来,有需要的朋友有空了看看。
  • 内容索引:VC/C++源码,界面编程,位图对应 用vc++制作一个...意思是,打开程序窗口,点击上部的位图按钮,点哪个,哪个就会在窗口的主体区显示出来,一一对应,不知这种功能有什么用,放上来,有需要的朋友有空了看看。
  • ibatis jdbcType 用法

    千次阅读 2017-08-16 17:16:10
    今天看了点ibatis的jdbcType的使用,虽然以前看见文档上有这么个东西,但是还真没用过。... 什么意思呢,下面我们举个例子说明一下。    ibatis测试环境搭建很简单,在此不再复述!  Session.ja
  • 哈皮其人

    千次阅读 2012-05-23 21:42:22
      很早之前写的一篇自我介绍 大家好,我叫哈皮,QQ 724101044 大家有空来看看 支持下 自我介绍一下呵呵,希望借此介绍,...哈皮是什么意思呢??有好多意思。从百度百科可以看到,“Harpy(哈皮) 希腊神话
  • 好吧,随便写了,没有排版,自己有空回来就常翻一翻,或者有什么能帮到大家的,可以给我留言.首先,Android中大绝大部分UI组件都放在android.widget包,或者android.view包中,Android中的所有UI组件都继承了View类,那么View...
  • Vuejs的一些总结

    2017-08-04 11:51:00
    Vuejs的一些总结 最近一段时间忙着工作的一些事情,同时自己也在试着把项目中的一些移动端页面...其实很多在官网都能找到,但是我们只看官网教程不去写,很难理解到底是什么意思,这里我把我用到的列出来。 ...

空空如也

空空如也

1 2 3 4
收藏数 72
精华内容 28
关键字:

有空什么意思