精华内容
下载资源
问答
  • 该文主要针对CVE-2020-1971漏洞,提供的Openssl升级方案。且提供排查服务使用openssl方法。openssl 1.0.2 用户Openssl官方提示:OpenSSL 1.0.2 is out of support and no longer receiving public updates. ...

    该文主要针对CVE-2020-1971漏洞,提供的Openssl升级方案。且提供排查服务使用openssl方法。

    openssl 1.0.2 用户

    Openssl官方提示:OpenSSL 1.0.2 is out of support and no longer receiving public updates. Extended 
    support is available for premium support customers: 
    https://www.openssl.org/support/contracts.html
    ,也就是说,1.0.2不维护了,不对公众提供支持了。这个时候,我们怎么修复CVE-2020-1971呢?

    1、官网下载对外发行的1.0.2u版本
    wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz
    2、解压缩
    tar -zvxf openssl-1.0.2u.tar.gz
    3、下载并替换 crypto/x509v3/v3_genn.c 文件
    wget https://purpleroc-blog-8gymra6s96518e6a-1253382304.tcloudbaseapp.com/v3_genn.c -O openssl-1.0.2u/crypto/x509v3/v3_genn.c

    或自行修改,文件改动如下:

    diff crypto/x509v3/v3_genn.c crypto/x509v3/v3_genn.c_bak110,140d109< static int edipartyname_cmp(const EDIPARTYNAME *a, const EDIPARTYNAME *b)< {<     int res;<<     if (a == NULL || b == NULL) {<         /*<          * Shouldn't be possible in a valid GENERAL_NAME, but we handle it<          * anyway. OTHERNAME_cmp treats NULL != NULL so we do the same here<          */<         return -1;<     }<     if (a->nameAssigner == NULL && b->nameAssigner != NULL)<         return -1;<     if (a->nameAssigner != NULL && b->nameAssigner == NULL)<         return 1;<     /* If we get here then both have nameAssigner set, or both unset */<     if (a->nameAssigner != NULL) {<         res = ASN1_STRING_cmp(a->nameAssigner, b->nameAssigner);<         if (res != 0)<             return res;<     }<     /*<      * partyName is required, so these should never be NULL. We treat it in<      * the same way as the a == NULL || b == NULL case above<      */<     if (a->partyName == NULL || b->partyName == NULL)<         return -1;<<     return ASN1_STRING_cmp(a->partyName, b->partyName);< }<150,152d118<         result = ASN1_TYPE_cmp(a->d.x400Address, b->d.x400Address);<         break;<154,155c120<         // result = ASN1_TYPE_cmp(a->d.other, b->d.other);<         result = edipartyname_cmp(a->d.ediPartyName, b->d.ediPartyName);--->         result = ASN1_TYPE_cmp(a->d.other, b->d.other);202,204d166<         a->d.x400Address = value;<         break;<206,207c168<         // a->d.other = value;<         a->d.ediPartyName = value;--->         a->d.other = value;241,242d201<         return a->d.x400Address;<244,245c203<         //return a->d.other;<         return a->d.ediPartyName;--->         return a->d.other;
    4、修改版本信息
    $ cd openssl-1.0.2used -i 's/OpenSSL 1.0.2u/OpenSSL 1.0.2x Self Change/g' ./crypto/opensslv.h
    5、设定Openssl 安装路径
    ./config --prefix=/usr/local/openssl
    6、编译
    make
    7、安装
    make install
    8、替换旧版本
    mv /usr/bin/openssl /usr/bin/openssl.bakmv /usr/include/openssl /usr/include/openssl.bakln -s /usr/local/openssl/bin/openssl /usr/bin/opensslln -s /usr/local/openssl/include/openssl /usr/include/opensslecho "/usr/local/openssl/lib" >> /etc/ld.so.confldconfig -v
    9、查看新Openssl版本
    openssl version

    返回OpenSSL 1.0.2x Self Change 20 Dec 2019

    Openssl 1.1.1 用户

    1、下载官方源码
    wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1i.tar.g
    2、解压缩
    tar -zvxxf OpenSSL_1_1_1i.tar.gz
    3、进入源码目录
    cd openssl-OpenSSL_1_1_1i/
    4、设定Openssl安装目录
    ./config --prefix=/usr/local/openssl
    5、编译
    make
    6、安装
    make install

    7、替换旧版本

    mv /usr/bin/openssl /usr/bin/openssl.bakmv /usr/include/openssl /usr/include/openssl.bakln -s /usr/local/openssl/bin/openssl /usr/bin/opensslln -s /usr/local/openssl/include/openssl /usr/include/opensslecho "/usr/local/openssl/lib" >> /etc/ld.so.confldconfig -v
    8、查看新Openssl版本
    $ openssl version

    返回OpenSSL 1.1.1i 8 Dec 2020 (Library: OpenSSL 1.1.1g 21 Apr 2020)

    更新Openssl之后

    更新Openssl后,需要排查对外服务是否静态编译方式使用openssl。这里针对一些对外服务(为啥是对外服务,因为对外受到的攻击可能性更大,只排查对外可以减少工作量)提供一些对外服务的排查方式。

    如果是静态编译的,则这些对外服务,需要制定上面更新的openssl库重新编译。

    1、 查看编译参数

    a、Nginx 编译参数

    Nginx -V

    11675a461f95f1a10490a3cfc54f6bfa.png

    看编译参数中,是否包含有--with-openssl=,如果有,则是静态编译。下同。

    b、Apache 编译参数

    cat your_apache_dir/build/config.nice

    c、php 编译参数

    your_php_dir/bin/php -i |grep configure

    d、mysql 编译参数

    cat your_mysql_dir/bin/mysqlbug |grep configure

    2、ldd 查看动态加载

    这个方法,首先,自己要确定软件使用到了openssl库。 ldd {your binary} 
    查看返回列表中是否包含有openssl的文件。 
    如有:

    63880cdf69ca17f95e15f62e60947ab7.png

    则代表是动态加载。

    如没有:

    57836ddd8e91dc951f74c3a230e9691c.png

    则为静态编译

    3、lsof 查看加载列表

    同上,这个方法,收看要确定软件使用到了openssl库。 lsof -p {pid of running program} 
    如有:

    caca7be18c11d492f9a224c63547e00d.png

    则代表是动态加载。 
    如没有:

    04dd5643062467b7bc47c494fcc95b00.png

    则代表是静态编译。

    展开全文
  • 移动网关架构升级方案--泛化service解耦 - 架构升级。
  • 数据库升级方案 点击查看视频介绍 一、面临的问题 在项目中数据库升级是经常遇到的事情,这个工作比较繁琐,特别是在线数据库升级需要十分小心,我们先来看一下通常面临的问题: 1、 表修改,包括增加了字段、...

    数据库升级方案

    点击查看视频介绍

     

    一、面临的问题

    在项目中数据库升级是经常遇到的事情,这个工作比较繁琐,特别是在线数据库升级需要十分小心,我们先来看一下通常面临的问题:

    1、    表修改,包括增加了字段、修改了字段类型或者长度,更换了主键等。对于表的升级不能删除重建,需要单独修改,或者写脚本来升级。

    2、    视图的修改,视图的修改比较简单,无非是增加了字段,取消了字段,不影响基础数据。视图的升级可以删除重建。

    3、    存储过程的修改,存储过程的修改和视图一样,可以删除重建,二者都可以通过脚本来完成。

    4、    函数的修改,如果项目中用到了函数,函数的升级和存储过程一样,不再赘述。

    5、    上述情况基本能涵盖了大部分的数据库升级的情景,这些工作可以在数据库管理工具中完成,也可编写脚本来完成。我想说的问题并不是这个,而是有时候我们不知道那个表,那个字段修改了,除非你每改一个地方都做好记录,尽管如此,在升级的时候也难免落下。

    我们公司有一套开发平台、由此平台开发了一套进销存,一套oa系统,而进销存又延伸出两套行业版进销存:鞋服通和医药通,以上产品有兴趣的可以去官网www.hfbpm.com试用,产品线如下图:

     

    数据库和基础功能都是继承的,即进销存使用开发平台中的表,医药通和鞋服通使用通用进销存中的表,oa使用开发平台中的表,那么它们之间的数据库升级就非常频繁,刚开靠手工记录改动的地方,针对性的升级,后来发现工作量非常大,而且经常出错。

    有没有一个一劳永逸的办法,比较差异进行数据库升级?只要思想不滑坡办法总比困难多!

    办法肯定是有的。

    二、解决方案

    要解决数据库升级,主要是解决针对表、视图、存储过程函数的升级,后面三个相对来说比较简单,直接删除重建即可,难点是如何获取三者的创建脚本?只要获取到完整的脚本,当做sql语句执行即可,mssqlServer也给出了方法(下面会具体介绍)。表的升级相对来说要麻烦一些,因为表不能删除重建,必须对列、主键、约束等逐项进行比较升级,对于新建的表没有提供获取创建表脚本的方法,需要自己来处理。

    下面详细介绍升级过程。

    1、  表创建

    MsSqlServer没有提供获取创建表脚本的方法,需要自己根据列属性生成创建脚本,为此我们编写了一个存储过程Sys_TableScript_MSSQL来做这件事情,存储过程的代码如下图:

     

    由于篇幅限制,详细代码就不贴出来了,这个方法也是从博客园里收到的,稍微改动了一下,执行后输出的结果如下:

     

    获取的是一个完整的创建表的脚本,该脚本当做普通的sql语句执行即可。

    2、表升级

    当表已经存在时,针对列进行升级,如果列不存在直接创建,如果列存在,那么是否升级判断依据是长度、类型、小数点位数、允许为空、默认值是否发生改变,上述只要有其一发生变化就要升级。

    创建列的sql脚本,如下:

    ALTER TABLE 表名 ADD 列名  类型  not null default '默认值'

    例如

    ALTER TABLE dx_ZhiBan ADD  leaderName  varchar(50)  not null default '未填'

    如果列已经存在需要使用修改列的sql脚本,如下:

    ALTER TABLE 表名 alter column 列名 类型 not null

    例如

    alter table dx_ZhiBan alter column Leader nvarchar(50) not null

    修改列时如果修改默认值,修改列的脚本不支持直接修改默认值,因为列一旦创建了默认值,那么就创建了一个约束,需要先删除这个约束,再重新创建默认值。删除默认值约束需要先找到默认值约束的名字,再执行删除约束脚本。查找默认值约束的sql脚本如下:

    select c.name from sysconstraints a
    
    inner join syscolumns b on a.colid=b.colid
    
    inner join sysobjects c on a.constid=c.id
    
    where a.id=object_id('表名') and b.name='列名'

    找到约束的名字如下图:

     

    删除默认值约束的sql脚本如下图:

    alter table 表名 drop constraint 默认值约束名

    例如:

    alter table dx_ZhiBan drop constraint DF__dx_ZhiBan__Leade__3FE65219

    删除默认值后,再执行创建默认值的sql脚本,如下:

    alter table 表名 add default '默认值' for 列名 with values

    例如:

    alter table dx_ZhiBan add default '未填' for Leader with values

    表的升级除了列还包括主键,主键的升级和默认值类似(因为他们都属于约束),需要先删除原来,再创建新的。查找主键约束的sql脚本如下:

      Select name from sysobjects where Parent_Obj=OBJECT_ID('表名') and xtype='PK'

    例如:

     Select name from sysobjects where Parent_Obj=OBJECT_ID('dx_ZhiBan') and xtype='PK'

    查找结果如下:

     

    删除主键约束的sql脚本如下:

    Alter table dx_ZhiBan Drop PK_dx_ZhiBan

    创建主键的sql脚本如下:

    ALTER TABLE dx_ZhiBan ADD PRIMARY KEY (ID, leader )

    注意,联合主键用逗号分隔,另外,需要说明的是在升级之前要判断主键是否需要升级,如果主键没有变化就不需要升级。

    3、视图升级

    视图升级过程较简单,删除掉重新创建即可。删除视图的sql脚本如下:

    drop view 视图名

    获取视图创建脚本的sql脚本,如下:

    EXEC sp_helptext @objname='视图名称'

    执行后结果如下图:

     

    获取到该脚本后,当做普通的sql语句执行即可。

    4、存储过程、函数升级

    二者的升级和视图类似,不再赘述,不同的是删除存储过程的sql脚本是:

    drop procedure 存储过程名

    删除函数的sql脚本是:

    drop function 函数名

    5、数据库升级工具

    数据库的升级是都能通过sql脚本来完成的,把这些脚本管理起来需要借助程序来完成,我们使用net的WinForm来编写程序。如下图:

     

    使用这个工具可以选择那些对象需要升级(没有勾选的不升级),升级的时候能看到进度和升级结果。

    本方案并不是十全十美的,有些问题还没解决,例如列名称修改、如何删除多余的列等。其他不当之处欢迎大家留言指正。

    点击查看视频介绍

    转载于:https://www.cnblogs.com/legweifang/p/11332769.html

    展开全文
  • Weblogic10.3.6补丁升级方案 在升级补丁之前需要先备份weblogic产品,一般安装在/weblogic/Middleware,将Middleware打个tar包即可。 流程: 1、停止所有的weblogic服务器; 2、删除以前的补丁;(如果以前没有...

    Weblogic10.3.6补丁升级方案

     

    在升级补丁之前需要先备份weblogic产品,一般安装在/weblogic/Middleware,将Middleware打个tar包即可。

    流程

    1、停止所有的weblogic服务器;

    2、删除以前的补丁;(如果以前没有安装补丁,则此步骤跳过

    3、安装补丁:p30857748_1036_Generic.zip;

       注意:本文档以p28343311_1036_Generic.zip为例,升级过程以实际补丁版本为准。

    4、验证补丁;

     

    一、停止所有weblogic server

    su – weblogic

    停服务

    (略)

     

    、查看Weblogic版本这个路径根据自己系统查找

    cd /home/weblogic/Middleware/wlserver_10.3/server/bin

     

    source setWLSEnv.sh

     

    java weblogic.version

    *******************************************************************************

    java weblogic.version

     

    WebLogic Server 10.3.6.0.171017 PSU Patch for BUG26519424 TUE SEP 12 18:34:42 IST 2017

    WebLogic Server 10.3.6.0  Tue Nov 15 08:52:36 PST 2011 1441050

     

    Use 'weblogic.version -verbose' to get subsystem information

     

    Use 'weblogic.utils.Versions' to get version information for all modules

    *******************************************************************************

    如果发现有PSU Patch字段,说明以前打过补丁,需要把以前打的补丁先卸载掉再打最新的补丁。

     

    升级bsu补丁

    在卸载和安装psu补丁之前,需要先将bsu工具进行升级,升级bsu的方法如下:

    上传p27238412_1036_Generic.zip到<BEAHOME>/utils/bsu路径下,解压后会生成bsu_update.sh文件,执行sh bsu_update.sh install,执行成功即可。

    cp /home/weblogic/softs/p27238412_1036_Generic.zip /home/weblogic/Middleware/utils/bsu/

     

    unzip p27238412_1036_Generic.zip

    ll

    chmod +x *

    sh bsu_update.sh install

     

    注意:升级bsu工具补丁和调整bsu内存大小是卸载和安装psu补丁的必要准备工作,可减少补丁升级过程中的报错。

    三、卸载以前安装的补丁如果之前没有安装补丁,不需要卸载

    *******************************************************************************

     

    1、查看和调整bsu内存大小

    su - weblogic

    cd /home/weblogic/Middleware/utils/bsu

    cat bsu.sh

    vi bsu.sh

    *************************************************************************

    #!/bin/sh

     

    JAVA_HOME="/weblogic/jdk1.6.0_45"

     

    MEM_ARGS="-Xms2048m -Xmx4096m"

     

    "$JAVA_HOME/bin/java" ${MEM_ARGS} -jar patch-client.jar $*

    *************************************************************************

    备注:如果MEM_ARGS过小,可以把它调整为2048m-4096m

     

     

    2、卸载PSU补丁(这步不需要)

     

    四、安装最新补丁集p28343311_1036_Generic.zip步骤

    1、上传补丁介质/home/weblogic/softs

    cd /home/weblogic/softs

     

    chmod 775 p30857748_1036_Generic.zip

     

    2、新建目录

    cd  /home/weblogic/Middleware/utils/bsu

    mkdir cache_dir

    备注:如果以前打过补丁,存在此目录不需要再新建

     

    把介质(p28343311_1036_Generic.zip)从software目录复制到cache_dir下

    cd /home/weblogic/Middleware/utils/bsu/cache_dir/

     

    cp /home/weblogic/softs/p30857748_1036_Generic.zip  ./

     

    ls

     

    3、解压缩补丁介质,并赋予执行权限

    su - weblogic

    cd /home/weblogic/Middleware/utils/bsu/cache_dir

    unzip p30857748_1036_Generic.zip

    ll

    chmod +x *

    ll

    mv patch-catalog_27039.xml patch-catalog.xml

     

    ll

     

    4、查看和调整bsu内存大小

    su - weblogic

    cd /home/weblogic/Middleware/utils/bsu

    cat bsu.sh

    vi bsu.sh

    *************************************************************************

    #!/bin/sh

     

    JAVA_HOME="/weblogic/jdk1.6.0_45"

     

    MEM_ARGS="-Xms2048m –Xmx4096m"

     

    "$JAVA_HOME/bin/java" ${MEM_ARGS} -jar patch-client.jar $*

    *************************************************************************

    备注:如果内存过小,在打补丁的时候,会报内存溢出错误。

    *******************************************************************************

     

     

    5、安装补丁

    su – weblogic

    cd /home/weblogic/Middleware/utils/bsu

     

    ./bsu.sh -install -patch_download_dir=/home/weblogic/Middleware/utils/bsu/cache_dir/ -patchlist=Q3ZB -prod_dir=/home/weblogic/Middleware/wlserver_10.3/

     

    *********************************************************************

    Checking for conflicts.........

    No conflict(s) detected

     

    Installing Patch ID: GENM..

    Result: Success

    *********************************************************************

     

     

    五、验证补丁是否打成功

    cd /home/weblogic/Middleware/wlserver_10.3/server/bin

    source setWLSEnv.sh

    java weblogic.version

    *********************************************************************

    WebLogic Server 10.3.6.0.181016 PSU Patch for BUG28343311 FRI AUG 17 18:34:42 IST 2018

    WebLogic Server 10.3.6.0  Tue Nov 15 08:52:36 PST 2011 1441050

     

    Use 'weblogic.version -verbose' to get subsystem information

     

    Use 'weblogic.utils.Versions' to get version information for all modules

    *********************************************************************

    备注:补丁已打成功

     

    补丁升级链接:https://pan.baidu.com/s/1QJOIMoSy0id68Wq1-AvFjA 

    提取码:7hvl

    展开全文
  • Flutter项目之app升级方案

    千次阅读 2019-02-11 02:19:14
    本篇文章用于讲解基于Flutter的app项目的升级方案。此文只有安卓版。 在我接触Flutter之前,做过一个比较失败的基于DCloud的HTML5+技术的app,做过几个RN项目。在这两种不同机制的app升级方案中,RN采用的是微软的...

    题接上篇的文章的项目,还是那个空货管理app。本篇文章用于讲解基于Flutter的app项目的升级方案。此文只有安卓版。

    在我接触Flutter之前,做过一个比较失败的基于DCloud的HTML5+技术的app,做过几个RN项目。在这两种不同机制的app升级方案中,RN采用的是微软的CodePush技术。而那个比较失败的项目采用的是检查版本号,下载安装包的方法。而在这个Flutter项目中,我在写app更新方法时,查资料的时候查到一篇文章,文章大概意思讲解了一下Flutter实行CodePush的可能性。但是,我并未找到可能实现的方法。因此,采用了简单粗暴的进行app升级。

    服务器的操作

    为了检验版本号和下载app安装包,我们在服务器某文件夹下放置两个文件,第一个为version.json文件,内容为:

    {
        "android": "1.0.1"
    }
    复制代码

    这个文件用于保存版本号,我们可以写一个读取方法来读取这个版本号:

    Future<bool> checkNewVersion() async {
      try {
        final res = await http.get(downLoadUrl + '/version.json');
        if (res.statusCode == 200) {
          final Map<String, dynamic> body = json.decode(res.body);
          if (defaultTargetPlatform == TargetPlatform.android) {
            final packageInfo = await PackageInfo.fromPlatform();
            final newVersion = body['android'];
            return (newVersion.compareTo(packageInfo.version) == 1);
          }
        }
      } catch (e) {
        return false;
      }
      return false;
    }
    复制代码

    第二个文件为app安装包,用来下载之后安装。

    app端的操作

    在app端需要增加的方法比较多,有需要处理app的权限和处理版本号读取以及app安装包下载和安装等方法。

    权限的获取

    targetSdkVersion < 24之前,我们可以通过在AndroidManifest.xml这个文件中写入获取读写权限:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    复制代码

    但是当Flutter更新到1.0.0版本之后,现阶段的targetSdkVersion为27。API 23之前的版本都是自动获取权限,而从 Android 6.0 开始添加了权限申请的需求,更加安全。因此,我们需要做一下额外的才做来获取权限。

    我在stackoverflow上找到了一篇文章了解了一下这个问题的解决方案。这篇文章中赞最高的方法比较负责,因为时间比较短,暂时没有研究,不过项目组大佬说如果要完美地解决这个问题还是要会过来研究一下。

    我在本次项目中采用了第二种方法,在MainActivity.java的onCreate方法中添加

    StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
    StrictMode.setVmPolicy(builder.build());
    复制代码

    然后引入simple_permissions这个依赖查询app的权限和询问是否开启权限。具体方法为:

      //是否有权限
      Future<bool> checkPermission() async {
        bool res = await SimplePermissions.checkPermission(
            Permission.WriteExternalStorage);
        return res;
      }
    
      //打开权限
      Future<PermissionStatus> requestPermission() async {
        return SimplePermissions.requestPermission(Permission.WriteExternalStorage);
      }
    复制代码

    版本号的获取

    我们在服务器上放置了一个名为version.json的文件,我们可以获取一下这个文件的内容访问写在里面的版本号:

    Future<bool> checkNewVersion() async {
      try {
        final res = await http.get(downLoadUrl + '/version.json');
        if (res.statusCode == 200) {
          final Map<String, dynamic> body = json.decode(res.body);
          if (defaultTargetPlatform == TargetPlatform.android) {
            // 获取此时版本
            final packageInfo = await PackageInfo.fromPlatform();
            final newVersion = body['android'];
            // 此处比较版本
            return (newVersion.compareTo(packageInfo.version) == 1);
          }
        }
      } catch (e) {
        return false;
      }
      return false;
    }
    复制代码

    因为这个项目是基于安卓7.0的手持终端的项目,此处做了是否为安卓的查询处理。

    安装包下载

    在下载安装包这个功能中,我们安装了flutter_downloader这个依赖。先获取一下下载地址,在下载安装包:

    // 获取安装地址
    Future<String> get _apkLocalPath async {
      final directory = await getExternalStorageDirectory();
      return directory.path;
    }
    // 下载
    Future<void> executeDownload() async {
      final path = await _apkLocalPath;
      //下载
      final taskId = await FlutterDownloader.enqueue(
          url: downLoadUrl + '/app-release.apk',
          savedDir: path,
          showNotification: true,
          openFileFromNotification: true);
      FlutterDownloader.registerCallback((id, status, progress) {
        // 当下载完成时,调用安装
        if (taskId == id && status == DownloadTaskStatus.complete) {
          _installApk();
        }
      });
    }
    // 安装
    Future<Null> _installApk() async {
      // XXXXX为项目名
      const platform = const MethodChannel(XXXXX);
      try {
        final path = await _apkLocalPath;
        // 调用app地址
        await platform.invokeMethod('install', {'path': path + '/app-release.apk'});
      } on PlatformException catch (_) {}
    }
    复制代码

    安装完成。

    总结

    以上为Flutter项目的更新步骤。在以上步骤中比较坑人的部分时权限获取至一块中,如果不设置,则会无法成功下载安装包。相信在不久的将来,Flutter可能也会用上CodePush。

    顺便说一下那个被我称为失败的项目,我去那个项目组的时候这个项目已经做了一半了。而让我十分震惊的是作为一个基于vue的项目,项目进行了一多半还没人使用状态管理,vuex引入了,但是没人用。嗯,强行carray,发现carry不动。只能尽力补救之后,眼睁睁地看着这个项目走向深渊。当时我还是个萌新,想进去学技术的,结果发现一群自称三年经验以上的人还需要我和另一个刚进公司的同事带。当时还是很绝望的,只能一边绝望一边带着他们加班。现在觉得项目组的水平和氛围真的重要!!!

    展开全文
  • 微信公众号用户认证机制升级方案 微信公众号用户认证机制升级方案 背景 解决方案:Token机制 认证流程: 具体实现: 附录 背景 原认证机制为 cookie方式,缺点如下: 不通用,cookie方式仅限于H5或...
  • 方案为本人将近两个月的思索改进成果,文档由一开始的创建到升级功能的一步步增加,最终完成了方案明确,思路明确,格式正规,考虑周全的文档
  • 极简的串口升级方案 最近接了一个项目,由于固件有点大,大概为4M byte,如果使用Ymodem、modbus等协议会有ACK应答等机制对于时间效率上会有损耗,所以我们选择了一个办法,就是不用协议,在简单的命令交互之后,...
  • 新系统升级方案

    2012-04-11 16:05:57
    最近做了新的系统升级方案以及功能实现,新系统我们在内部叫做DotaPOS, 因为大家下班后都喜欢玩dota这个游戏所有就起了这个名字。~~~~ DotaPOS的结构如下 需要升级的部分也就是上图中的 超市wcf服务、...
  • xUtils框架DBUtils数据库版本升级方案 DBUtils介绍 表结构更新,升级数据库
  • FTP服务器的STM32程序远程升级方案陈明;姚金杰;张晓荷【期刊名称】《单片机与嵌入式系统应用》【年(卷),期】2020(020)001【摘要】随着智慧城市与物联网技术的发展,各种远程监控设备得以广泛应用,一种可靠有效的远程...
  • Android Small框架增量升级方案

    千次阅读 2016-08-21 17:59:56
    但是如果使用增量升级方案,用户只需要下载新旧版本的差异包,然后在本地合成就行,这样省时省力。我们可以看下某产品使用增量升级时的数据: xxx.2.4.0000.apk 32MB xxx.2.5.0000.apk 28MB 差异包 6.3MB 其中增量
  • 在单机软件中,如一些小型的管理软件,在发布一个版本之后,后期如果需要对软件进行升级但数据库同时也需要升级,则可以采取下面升级方案(方案不是最好的,如果有更好的欢迎指教),该解决方案可以满足需要递归升级...
  • ReactNative增量升级方案 汇总

    千次阅读 2016-12-28 16:43:13
    1 、ReactNative增量升级方案 https://github.com/cnsnake11/blog/blob/master/ReactNative%E5%BC%80%E5%8F%91%E6%8C%87%E5%AF%BC/ReactNative%E5%A2%9E%E9%87%8F%E5%8D%87%E7%BA%A7%E6%96%B9%E6%A1%88.md
 
 ...
  • 在物联网开发中,OTA升级(firmware update Over The Air)是模组必备的功能,本文将以RTL8711、乐鑫8266 、庆科3186 wifi模块为例介绍几种的常见的... RTL8711 ota升级方案 方案简介 8711flash分区如下图:  ...
  • 现场升级方案:LPC1778采用U盘方式进行程序IAP升级功能的实现
  • 前面几个blog贴了很多网址,虽然也有自己总结的东西,并以刷机角度去总结分析,但是没有新东西终究意义不大,一想到这就感觉该系列博客低了逼格。... 本博客以GPT(分区表)改变情况,做升级方案分析...
  • 灰度升级方案

    千次阅读 2019-02-26 18:06:44
    monitor灰度升级方案如下: 首先,需要push服务器做配合,因为monitor主要是用来管理push,没有push的支持,也很难测试monitor的功能。 比如有5台push服务器,那么拿出2台push配合monitor做灰度升级。 如果...
  • 2020年9月23日,广和通(股票代码:300638),全球领先的物联网无线通信解决方案与无线通信模组提供商,宣布与ST、艾拉比联合发布首款OTA差分升级创新方案——OpenFOTA创新升级方案。该方案基于广和通L610 LTE Cat 1...
  • 现场升级方案:采用U盘方式进行程序IAP升级功能的实现 闲来无事,总结一下前段时间做过的U盘升级项目。一个新手的成长之路在于善于总结,生活也是一样扯远了,我准备了两个软件环境,一个带操作系统(UCOS)的...
  • 网络线路升级方案分两部分:1.硬件部分升级http://yewei1023.blog.51cto.com/5362100/15532942.线路带宽部分升级http://yewei1023.blog.51cto.com/5362100/1553301现状:目前公司在使用电信4M互联网城域网光纤(包含...
  • 百兆局域网千兆升级方案随着主机的升级公司已有90%以上的主机带有千兆网卡,以及网络的应用增多,对交换机之间、以及交换机到服务器之间带宽的要求越来越高,原有带宽已经成为制约网络传输的瓶颈。将主干网络提升至...
  • 今天我们将进行OpenDroid一个重头戏,也是本系列博客的最后一篇——数据库升级方案。 说道数据库升级,我可是很头疼的, 为什么呢? 因为以前的项目中,根本没有考虑数据库升级方案的问题,就直接drop table了,这样...
  • 现场升级方案:LPC1788采用U盘方式进行程序IAP升级功能的实现 闲来无事,总结一下前段时间做过的U盘升级项目。一个新手的成长之路在于善于总结,生活也是一样扯远了,我准备了两个软件环境,一个带操作系统(UCOS)...
  • Hadoop升级方案(二):从Hadoop 1.0升级到2.0(1) Category: hadoop 2.0之YARN View: 12,838 Author: Dong 作者:Dong | 新浪微博:西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者...
  • C# 程序打包 升级方案要点

    千次阅读 2013-06-14 11:05:14
    C# 程序打包 升级方案要点 1、改变ProductCode、Version(version比前一版本要高比如以前1.0.0现在就是1.0.1),  保持UpgradeCode不变(当设置RemovePreviousVersion=true时就是靠它来找到卸载旧版本) 2、...
  • 针对这几年来WebLogic软件经常报出的java反序列化漏洞问题,因为weblogic底层也使用Apache Commons Collections库,...还是未修完,本文针对Weblogic反序列化漏洞补丁提供升级方案以及升级过程遇到问题问题过程处理。
  • FPGA远程升级方案

    千次阅读 2020-03-12 19:11:03
    为了能使系统得到更灵活的应用,充分发挥FPGA的灵活性、高效性,FPGA的软硬件程序都需要方便的更新和升级功能;而当形成产品后,通过JTAG和NiosII IDE工具来联合完成对EPCS Flash的更新烧写很不方便。为此,本文...
  • Android 应用升级方案

    千次阅读 2017-03-16 15:16:48
    转:http://www.jianshu.com/p/abbaddcf449f ... 一、全量升级 全量升级Demo 现在很多的App中都会有一个检查版本的功能。例如斗鱼TV App的设置界面下:   当我们点击检查更新

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,878
精华内容 7,951
关键字:

升级方案