用Windows批处理文件封装ftp文件下载

这几天,工作中需要从远端ftp服务器下载并分析大量数据文件。数据文件的分析没什么可说的,就是字串解析,要说说ftp文件下载。
要下载ftp服务器上的文件,方法有多种,如:
1. 用Socket建立链接,然后按照FTP协议,进行命令字交互,这相当于实现一个小的ftp客户端程序;
2. 用WinSDK中的WinINet, 里面提供了FtpGetFile这样的一系列方法,用于ftp客户端编程;
3. 使用类似CuteFTP这样的客户端软件;
4. 使用控制台ftp命令;

使用cuteftp等软件,需要安装软件不说,还不便于与数据处理程序协调工作,所以不行。剩下三种方法都可以,但前两种,写程序工作量比较大,那就看看*后一个方法:使用控制台ftp命令。

常用的ftp命令有open, user, get, mget, put, quit等,*重要一点,ftp命令(实际上也是一客户端程序)支持命令脚本,也就是他可以根据你设计的脚本进行链接和下载。
一个简单的脚本如下:
—————————-
open theftpserver
user admin 123456
get thefile.dat
quit
—————————-
将这样的脚本保存后(如down.ftp),用ftp命令直接调用即可:
c:/blog/csdn/guanzhongs>ftp -n < down.ftp

这样看来,使用ftp命令,结合Windows的批处理文件,完全可以把文件下载部分解决。

还有一问题:下载的文件名是不确定的,但是ftp命令中需要指定确定的文件名。解决这个问题的方法是,在批处理文件中动态生成ftp脚本文件,然后调用ftp命令执行它。

下面是一个例子,已经在WindowsXP下测试通过。这个例子可以接受服务器名,用户名,用户密码,下载文件名为参数,然后将文件下载到本地目录。同时记录简单的log信息。

—————————————————————————-
— getfiles.bat
—————————————————————————-

@echo off

rem /
rem // guanzhong 2006-1-25
rem // Blog : http://blog.csdn.net/guanzhongs
rem // batch file for download file(s) from remote server
rem // Command line :
rem // getfiles <server> <user> <password> <remotefilename>
rem /

if “%1″==”” goto Usage
if “%1″==”/?” goto Usage
if “%2″==”” goto Usage
if “%3″==”” goto Usage
if “%4″==”” goto Usage

set ftpfile=getfiles.tmp
set logfile=getfiles.log

rem // 生成ftp下载脚本

echo open %1 > “%ftpfile%”
echo user %2 %3 >> “%ftpfile%”
echo bin >> “%ftpfile%”
echo prompt >> “%ftpfile%”
echo mget %4 >> “%ftpfile%”
echo quit >> “%ftpfile%”

rem // 记录log

echo ——————————– >> “%logfile%”
date /t >> “%logfile%”
time /t >> “%logfile%”
echo ——————————– >> “%logfile%”

rem // 下载文件
ftp -n < “%ftpfile%” >> “%logfile%”

rem // 删除临时脚本
del “%ftpfile%”

echo getfiles done! >> “%logfile%”

goto End

:Usage
echo Get file(s) from the remote server, support multi get.
echo Usage:
echo getfiles [server user password remotefilename]

:End

@echo on

—————————————————————————-

上例中,批处理的第四个参数是所要下载的文件名,这个文件名与dos命令中一样,支持通配符,也就是说,这个批处理文件支持下载批量文件,如:
c:/blog/csdn/guanzhongs>getfiles 127.0.0.1 admin 123456 *.jpg
可以把远程目录下的所有jpg文件下载过来。

另外,上例中ftp脚本文件中多了两行内容:
echo bin >> “%ftpfile%”
echo prompt >> “%ftpfile%”
*行是指定用二进制方式传输,也可以用ASCII方式;
第二行是指定如果有文件覆盖时,不需要提示,这样就不会打断批处理文件的执行了。

有了这个getfiles.bat文件,在程序中下载文件,只需要ShellExecute一下就行了。

对于Linux系统,思路是类似的,而且Linux系统的Shell功能非常强大,能够实现更加完善的功能。

完成上面工作,你需要了解:
DOS/Window Console命令,及批处理脚本编写。
控制台Ftp命令的使用。

 

批处理ftp上传文件到linux服务器上

该脚本可以把本地指定目录下的文件,通过ftp上传到linux服务器的指定位置。

@echo off
::创建本地目录
mkdir D:\upload\filea
mkdir D:\upload\fileb
set file=114.ftp
::创建114.ftp,并写入连接ftp的信息
echo open 192.168.1.114 > C:\%file%
echo user libin >> C:\%file%
echo libin>> C:\%file%
echo lcd D:\upload\filea>> C:\%file%
echo cd /home/libin/upload/filea>> C:\%file%
echo bin>> C:\%file%
echo prompt>> C:\%file%
echo mput *>> C:\%file%
echo lcd D:\upload\fileb>> C:\%file%
echo cd /home/libin/upload/fileb>> C:\%file%
echo bin>> C:\%file%
echo mput *.zip>> C:\%file%
echo bye>> C:\%file%
echo quit>> C:\%file%
echo exit>> C:\%file%
::先把待上传的文件放到本地指定目录下
echo ————————————–
echo 请把要上传的文件放到指定目录:
echo filea放到D:\upload\filea
echo fileb升级包放到D:\upload\fileb
echo ————————————–
pause
if not exist “D:\upload\filea\” echo filea未放到指定目录
if exist “D:\upload\filea\*” (
echo filea已放到指定目录
echo 正在上传filea
C:
ftp -n -s:C:\114.ftp>nul
echo filea上传成功
echo 清理本地文件filea
del D:\upload\filea\*
)
echo ————————————–
pause
if not exist “D:\upload\fileb\*.zip” echo fileb未放到指定目录
if exist “D:\upload\fileb\*.zip” (
echo fileb已放到指定目录
echo 正在上传fileb
C:
ftp -n -s:C:\114.ftp>nul
echo fileb上传成功
echo 清理本地fileb
del D:\upload\fileb\*
)
echo ————————————–
pause

TELNET 登陆远程机后 如何上传下载文件

TELNET登陆上了远程的计算机,但是如何上传文件、下载文件呢?

网上有很多种方法,但是实验后都不能成功,我说一下自己所用的简单的方法。

思路: 在自己的机子上架设FTP服务器,然后登陆远程机后,就可以登录自己的FTP

步骤一:

添加WINDOWS组件 选择FTP服务

步骤二:

选择Internet信息服务

FTP站点 属性 设置一下

步骤三

TELNET 登录远程机子后

然后用ftp 192.168.1.22 登录自己机子的FTP 就可以用ftp上传下载文件了

注: 本文仅供研究 拒*用于非法用途
————————————————

新零售:从上云到云原生 Serverless

某零售商超行业的龙头企业,其主要业务涵盖购物中心、大卖场、综合超市、标准超市、精品超市、便利店及无人值守智慧商店等零售业态,涉及全渠道零售、仓储物流、餐饮、消费服务、数据服务、金融业务、跨境贸易等领域。为了持续支持业务高速且稳定地发展,其在快速上云后,将核心业务改造为全 Serverless 架构的中台模式,采用函数计算 + API 网关 + 表格存储 OTS 作为计算网络存储核心,弹性支撑日常和大促峰谷所需资源,轻松支撑 618/ 双11/ 双12 大促。

%title插图%num

传统企业为什么更需要关注 Serverless

为了降低技术研发成本、提升运维效率,越来越多的企业选择使用 Serverless 作为基础研发底座,大力发展业务。在 CNCF Serverless 研究报告中显示,大量的国内开发人员正在将传统架构往 Serverless 上做迁移。Serverless 的出现给传统企业数字化转型带了更多机遇。

传统企业为什么更要关注 Serverless ?

现如今,大量尖端技术人才更偏向在互联网公司就业,传统企业又面对着大量技术升级和重构技术架构的刚需,人才缺口和技术升级之间产生了对云原生技术的需求。Serverless 的出现抹平了研发人员在预算、运维经验上的不足。在帮助企业对抗业务洪峰的情况下,研发人员能轻易掌控处理,不仅*大地降低了研发技术门槛,而且大规模提升了研发效率。对于开发者而言,线上预警、流量观测等工具一应俱全,关键是免去了运维负担,切实为广大开发者提供了普惠技术红利。对传统企业而言,Serverless 缩短了互联网公司与传统企业之间技术竞争力的距离。

%title插图%num

从上云到云原生

2016 年以后,随着国内公共云的迅速发展,全面上云势不可挡。某知名大型商场在 2018~2019 年期间,把自建机房中的各个系统模块逐渐迁移到了公有云,整体架构没有太大改变,因此迁移工作比较顺利。

系统全面迁移上云后一些改进和不足:

1

改进

不再需要关心网络、操作系统的硬件细节

比如阿里云的 ECS 会提前做调度和预警,把用户数据转移并做多份数据的备灾,防止磁盘坏掉的情况发生。

升级快捷简单

比如用户使用的是 4 核的机器,当发现业务增长迅速需要做硬件升级时,就只需要做一个镜像。比如在夜间做一个磁盘快照,重新申请一台新机器,然后把快照恢复上去,就可以完成一键迁移。对用户来说这是非常快捷的方式,对开发者来说也是较好的体验。

机器扩容时间大幅缩短

上面提到的是单机扩容,比如 4 核升到 8 核、16G 升到 32G 的内存。除此之外还有横向的扩容,例如用户交易系统的 API 接口,随着业务的发展需要由原来的 2 台机器扩到 8 台机器,这种情况下用户只需去申请机器,然后将镜像扩展到不同的机器上即可。

2

不足

资源预算困难

无法预估业务遇到大促活动时所能达到的体量,因此无法准确计算出所需硬件的数量。

水平扩展

水平扩展对研发有较高的要求。比如数据是否要做到无状态,无状态的话水平扩展会比较容易,而如果是有状态,数据可能就需要做缓存,这就会涉及到数据库相关的问题,例如数据过期、一致性等。如果对这些了解不够透彻,做水平扩展就会比较困难。

水位监控

许多开发者在水位监控上处理得并不完善,如果将各个业务系统混在一台机器上,当遇到机器水位较高,想要快速排查问题并及时进行流控、拆分、临时修复等就显得尤为困难。

财务预算困难

与资源预算困难类似。

硬件升级成本高

要做到用户无感无损升级,可能会涉及到连接上的处理与数据库一致性的问题。如果多个模块需要同时升级,还要注意数据结构的兼容问题。

数据库单点故障

许多厂家将数据全部放在一个数据库中,如果处理不妥当可能会造成单点故障。这就要做数据拆分,粗拆的话,需要注意事务和锁相关的问题,效率会大打折扣;细拆的话,做查询和排序时就会比较困难,给业务实现造成一定麻烦。

%title插图%num

业务挑战

在一次年中大促时,由于线上业务用户访问不可控,数据量过大,MySQL 单机访问被打爆,导致了存储数据库出现问题,影响到了多个系统,造成了一定的损失。因此在后续服务化改造过程中,数据库选型由 MySQL 更改为表格存储 OTS,表格存储*大的优点是用户不需要关心访问量和机器数的比例关系。只要访问量扩大,后台会自动扩容增扩机器,满足高并发的数据读取;在数据并发请求降低处于低峰期时,后台就会将机器回收,用户不再需要关心机器的数量及如何调动。

%title插图%num

Severless改造

%title插图%num

针对用户流量不可控问题,客户引入了阿里云的产品“API 网关”,API 网关可以针对不同渠道商做管控发布及流量控制。比如发现微信渠道流量有异常,就可以借助 API 网关进行限流。

另外计算也是一个非常重要的问题,客户经过探索发现阿里云函数计算 FC非常契合其业务场景。比如定时抢购、优惠券投放等活动造成巨大的 burst 冲击,当发现计算资源不够的时候再去买机器肯定是来不及的,而函数计算及时扩容的功能就很好地解决了这个问题。另外其数据观测和异常报警功能,也吸引到了客户。

今年 3 月,权威咨询机构 Forrester 发布 2021 年*季度 FaaS 平台评估报告,阿里云函数计算凭借在产品能力、安全性、战略愿景和市场规模等方面的优势脱颖而出,产品能力位列全球*,这也是首次有中国云厂商进入 FaaS 领导者象限。

%title插图%num

在紧张的测试验证后,技术人员发现函数计算的优异表现很契合自身业务高度弹性的会员查询系统。从 2019 年 7 月开始,客户的技术团队在不到 3 个月的时间里,将原有的会员数据全部副本镜像迁移到表格存储,并将所有渠道商的 API 全面迁移到阿里云 API 网关做分发,会员查询业务的计算业务也全面迁移到阿里云函数计算。

2019 年的 双11,函数计算作为计算模块,表格存储作为存储模块,顺利地帮助客户渡过大促,扛住高峰流量的同时确保了应对业务的弹性。而未使用 Serverless 的业务因为预估不足,出现了一些异常。正是因为函数计算在 双11 中的表现让客户技术人很振奋。在顺利度过大促活动后,客户就在所有业务中全面使用函数计算及表格存储!

%title插图%num

新零售商超整体架构图

  • 全 Serverless 架构:函数计算 + API 网关 + 表格存储;
  • 弹性高可用:毫秒级弹性扩容、充足的资源池水位、跨可用区高可用;
  • 敏捷开发免运维:函数式*简编程可专注于业务创新,无采购和部署成本、提供监控报警等完备的可观测能力。

2019 年下半年,阿里云函数计算宣布推出 2.0,支持预留模式,全面解决冷启动延迟大的问题;推出单实例多请求问题,较少实例支持重 IO 高并发类型请求调用;支持自定义运行时,支持一键迁移传统 Web 架构服务器。2.0 的出现让函数计算在业务和规模上实现了巨大升级。

在经历了过去的线下场景考验后,客户将各渠道商的业务及旗下的移动 App,以及线上交易、定时抢优惠券、秒杀业务也全部从 ECS 迁移到了函数计算 2.0,在开启预留模式调整好单实例多并发的模式后,顺利地扛过了是平时数十倍的洪峰流量请求。

%title插图%num

%title插图%num

比较上述的“时间-流量图”及“时间-延迟”两图可以看到,急剧上升的突发流量对用户造成的延迟变化影响非常小,从实际用户反馈来看确实也证实了用户体验非常顺滑。

所有的数据和业务上云,减轻的不只是研发人员的心理压力,更为研发人员大量减负,从而让大家可以做更聚焦在业务逻辑上的事情。函数计算可以让研发人员不用管理服务器这些基础设施,只要编写代码上传,系统就会准备好计算资源,还提供日志查询、性能监控、报警等功能。如果是按照以前的模式,超市搞 双11 大促,相关的技术团队都睡不着觉,只靠扩展机器支撑大体量的流量和业务,谁心里都没谱。现在扩容的问题交给阿里云,水位远远高于客户原有的储备能力的*限。

今年,Serverless 迎来重大升级。函数计算重磅发布容器镜像加速技术,容器启动延时缩短 50%-80%,将原本属于开发者的镜像优化负担转由函数计算承担,进一步帮助开发者提高生产效率,专注业务创新。该技术源于阿里集团超大规模和场景高度复杂的容器环境,对镜像存储、加速技术有深厚的积累,并出色地承担了 3 年双十一、双十二、春节等大促秒杀场景的严苛的挑战。

同时,Serverless 应用引擎(SAE)重磅发布 Java 应用启动加速功能,首度将 Alibaba Dragonwell(阿里云开源的 Open JDK 长期支持版本)的冷启动加速技术、多线程运行加速技术和 SAE 自身的原地升级策略、镜像预热策略相结合,实现了 Java 应用的端到端启动速度提升 45%,*快仅需 15s,多线程性能提升 30%。

%title插图%num

由于业务场景、用户习惯迅速变化,许多行业数字化业务出现急速增长,加快数字化业务发展成为传统企业的必然选择。云原生是企业数字化*短路径,越来越多的传统企业正在拥抱云原生,借助更加快速、灵活的开发和交付模式,满足市场快速变化的需求,进而加速业务创新。传统零售企业借助 Serverless 保证了一次次大促的成功,正是这一趋势的*好证明。

MySQL 十大常用字符串函数

 

%title插图%num

数据库函数是一种具有某种功能的模块,可以接收零个或多个输入值,并且返回一个输出值。MySQL 为我们提供了许多用于处理和分析数据的系统函数,本文给大家介绍 10 个常用的字符串函数,以及相关的其他函数。

%title插图%num

CONCAT()

CONCAT(str1,str2,…))函数用于返回多个字符串连接之后的字符串,例如:

  1. SELECT CONCAT(‘MySQL’, ‘字符串’, ‘函数’) AS str;
  2. str |
  3. ————–+
  4. MySQL字符串函数|

如果该函数中的任何参数为 NULL,返回结果为 NULL。例如:

  1. SELECT CONCAT(‘MySQL’, NULL, ‘函数’) AS str;
  2. str|
  3. —+
  4.    |

对于字符串常量,我们也可直接将它们连写在一起。例如:

  1. SELECT ‘MySQL’ ‘字符串’ ‘函数’ AS str;
  2. str |
  3. ————–+
  4. MySQL字符串函数|

以上方式只能用于连接字符串常量,不能用于连接字段的值。

????如果启用了 SQL 模式 PIPES_AS_CONCAT,MySQL 逻辑或运算符(||)也可以用于连接字符串,类似于 Oracle 和 PostgreSQL。

除了 CONCAT(str1,str2,…)) 函数之外,CONCAT_WS(separator,str1,str2,…))函数表示使用指定的分隔符 separator 连接多个字符串,分隔符为 NULL 则返回 NULL。例如:

  1. SELECT CONCAT_WS(‘-‘, ‘MySQL’, NULL, ‘字符串’) AS str1,
  2. CONCAT_WS(NULL, ‘MySQL’, ‘字符串’) AS str2;
  3. str1 |str2|
  4. ———–+—-+
  5. MySQL-字符串|    |

%title插图%num

LOWER()

LOWER(str)和LCASE(str)函数用于将字符串转换为小写形式,例如:

  1. SELECT LOWER(‘MySQL字符串函数’) AS str1, LCASE(‘MySQL字符串函数’) AS str2;
  2. str1 |str2 |
  3. ————–+————–+
  4. mysql字符串函数|mysql字符串函数|

MySQL 大小写转换函数不支持二进制字符串(BINARY、VARBINARY、BLOB)),可以将其转换为非二进制的字符串之后再进程处理。例如:

  1. SELECT LOWER(BINARY ‘MySQL字符串函数’) AS str1,
  2. LOWER(CONVERT(BINARY ‘MySQL字符串函数’ USING utf8mb4)) AS str2;
  3. str1 |str2 |
  4. ——————-+————–+
  5. MySQL孠符串堽栰|mysql字符串函数|

%title插图%num

UPPER()

UPPER(str)和UCASE(str)函数用于将字符串转换为大写形式,例如:

  1. SELECT UPPER(‘MySQL字符串函数’) AS str1, UCASE(‘MySQL字符串函数’) AS str2;
  2. str1 |str2 |
  3. ————–+————–+
  4. MYSQL字符串函数|MYSQL字符串函数|

%title插图%num

LENGTH()

LENGTH(str)和OCTET_LENGTH(str)函数用于返回字符串的字节长度,例如:

  1. SELECT LENGTH(‘MySQL字符串函数’) AS len1, OCTET_LENGTH(‘MySQL字符串函数’) AS len2;
  2. len1|len2|
  3. —-+—-+
  4.   20|  20|

在 utf8mb4 编码中,一个汉字字符占用 3 个字节。

另外,CHAR_LENGTH(str)和CHARACTER_LENGTH(str)函数用于返回字符串的字符长度,也就是字符个数。例如:

  1. SELECT CHAR_LENGTH(‘MySQL字符串函数’) AS len1, CHARACTER_LENGTH(‘MySQL字符串函数’) AS len2;
  2. len1|len2|
  3. —-+—-+
  4.   10|  10|

BIT_LENGTH(str)函数用于返回字符串的比特长度(比特数量),例如:

  1. SELECT BIT_LENGTH(‘MySQL字符串函数’) AS len;
  2. len|
  3. —+
  4. 160|

一个字节包含 8 个比特。

%title插图%num

SUBSTRING()

SUBSTRING(str,pos)、SUBSTRING(str FROM pos)、SUBSTRING(str,pos,len)以及SUBSTRING(str FROM pos FOR len)函数都可以用于返回从指定位置 pos 开始的子串,len 表示返回子串的长度;pos 为 0 表示返回空字符串。例如:

  1. SELECT SUBSTRING(‘MySQL字符串函数’, 6) AS str1,
  2. SUBSTRING(‘MySQL字符串函数’ FROM 6) AS str2,
  3. SUBSTRING(‘MySQL字符串函数’, 6, 3) AS str3,
  4. SUBSTRING(‘MySQL字符串函数’ FROM 6 FOR 3) AS str4,
  5. SUBSTRING(‘MySQL字符串函数’, 0) AS str5;
  6. str1 | str2 |str3 |str4 |str5|
  7. ———+———+——-+——+—-+
  8. 字符串函数|字符串函数|字符串 |字符串 |    |

位置参数 pos 可以为负数,此时返回的子串从字符串右侧第 pos 个字符开始。例如:

  1. SELECT SUBSTRING(‘MySQL字符串函数’, -2) AS str1,
  2. SUBSTRING(‘MySQL字符串函数’, -5, 3) AS str2;
  3. str1 |str2 |
  4. ——+——+
  5. 函数  |字符串 |

另外,SUBSTR()和MID()函数都是 SUBSTRING() 函数的同义词,也支持以上 4 种形式。

LEFT(str,len)函数返回字符串 str 左侧的 len 个字符,RIGHT(str,len)函数返回字符串 str 右侧的 len 个字符。例如:

  1. SELECT LEFT(‘MySQL字符串函数’,5) AS str1,
  2. RIGHT(‘MySQL字符串函数’,5) AS str2;
  3. str1 |str2 |
  4. —–+———+
  5. MySQL|字符串函数|

SUBSTRING_INDEX(str,delim,count)函数返回第 count 个分隔符 delim 之前的子串。如果 count 为正数,从左侧开始计数并返回左侧的所有字符;如果 count 为负数,从右侧开始计数并返回右侧的所有字符。例如:

  1. SELECT SUBSTRING_INDEX(‘张三;李四;王五’, ‘;’, 2) AS str1,
  2. SUBSTRING_INDEX(‘张三;李四;王五’, ‘;’, -2) AS str2;
  3. str1 |str2 |
  4. ——–+——–+
  5. 张三;李四|李四;王五|

%title插图%num

TRIM()

TRIM([remstr FROM] str)函数用于返回删除字符串 str 两侧所有 remstr 字符串之后的子串,remstr 默认为空格。例如:

  1. SELECT TRIM(‘ MySQL字符串函数 ‘) AS str1,
  2. TRIM(‘-‘ FROM ‘–MySQL字符串函数–‘) AS str2;
  3. str1 |str2 |
  4. ————–+————–+
  5. MySQL字符串函数|MySQL字符串函数|

TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)函数用于返回删除字符串 str 两侧/左侧/右侧所有 remstr 字符串之后的子串,默认删除两侧字符串(BOTH),remstr 默认为空格。例如:

  1. SELECT TRIM(LEADING ‘ ‘ FROM ‘ MySQL字符串函数 ‘) AS str1,
  2. TRIM(TRAILING ‘-‘ FROM ‘–MySQL字符串函数–‘) AS str2;
  3. str1 |str2 |
  4. —————-+—————-+
  5. MySQL字符串函数  |–MySQL字符串函数|

%title插图%num

LPAD()/RPAD()

LPAD(str,len,padstr)函数表示字符串 str 的左侧使用 padstr 进行填充,直到长度为 len;RPAD(str,len,padstr)函数表示在字符串 str 的右侧使用 padstr 进行填充,直到长度为 len。例如:

  1. SELECT LPAD(123, 6, ‘0’) AS str1, LPAD(123, 2, ‘0’) AS str2,
  2. RPAD(123, 6, ‘0’) AS str1, RPAD(123, 2, ‘0’) AS str1;
  3. str1 |str2|str1 |str1|
  4. ——+—-+——+—-+
  5. 000123|12  |123000|12  |

当字符串 str 的长度大于 len 时,相当于从右侧截断字符串。

另外,REPEAT(str,count)函数用于将字符串 str 复制 count 次并返回结果。例如:

  1. SELECT REPEAT(‘????’, 5) AS str;
  2. str |
  3. ———-+
  4. ????????????????????|

%title插图%num

INSTR()

INSTR(str,substr)函数用于返回子串 substr 在字符串 str 中*次出现的索引位置,没有找到子串时返回 0。例如:

  1. select INSTR(‘MySQL字符串函数’, ‘字符串’) AS index1,
  2. INSTR(‘MySQL字符串函数’, ‘日期’) AS index2,
  3. INSTR(‘MySQL字符串函数’, ) AS index3,
  4. INSTR(‘MySQL字符串函数’, null) AS index4;
  5. index1|index2|index3|index4|
  6. ——+——+——+——+
  7.      6|     0|     1|      |

另外,LOCATE(substr,str)函数也可以用于返回子串 substr 在字符串 str 中*次出现的索引位置,和 INSTR(str,substr) 函数唯一的不同就是参数的顺序相反。

LOCATE(substr,str,pos)函数返回子串 substr 在字符串 str 中从位置 pos 开始*次出现的索引位置,例如:

  1. SELECT LOCATE(‘S’,‘MySQL Server’, 5) AS ind;
  2. ind|
  3. —+
  4.   7|

FIELD(str,str1,str2,str3,…) 函数返回字符串 str 在后续字符串列表中出现的位置,没有找到时返回 0。例如:

  1. SELECT FIELD(‘李四’, ‘张三’, ‘李四’, ‘王五’) AS ind;
  2. ind|
  3. —+
  4.   2|

FIND_IN_SET(str,strlist) 函数返回字符串 str 在列表字符串 strlist 中出现的位置,strlist 由 N 个子串使用逗号分隔组成。例如:

  1. SELECT FIND_IN_SET(‘李四’, ‘张三,李四,王五’) AS ind;
  2. ind|
  3. —+
  4.   2|

%title插图%num

REPLACE()

REPLACE(str,from_str,to_str)函数用于将字符串 str 中所有的 from_str 替换为 to_str,返回替换后的字符串。例如:

  1. SELECT REPLACE(‘MySQL字符串函数’, ‘字符串’, ‘日期’) AS str1,
  2. REPLACE(‘MySQL字符串函数’, ‘字符串’, ) AS str2;
  3. str1 |str2 |
  4. ————+———+
  5. MySQL日期函数|MySQL函数|

另外,INSERT(str,pos,len,newstr)函数用于在字符串 str 的指定位置 pos 之后插入子串 newstr,替换随后的 len 个字符。例如:

  1. SELECT INSERT(‘MySQL字符串函数’, 6, 3, ‘日期’) AS str;
  2. str |
  3. ————+
  4. MySQL日期函数|

%title插图%num

REVERSE()

REVERSE(str)函数用于将字符串 str 中的字符顺序进行反转。例如:

  1. SELECT REVERSE(‘上海自来水来自海上’)=‘上海自来水来自海上’ AS “回文”;
  2. 回文|
  3. —-+
  4.    1|

 

到底要不要报考“通信工程”?

    “通信工程”是干嘛的

通信工程,英文全称叫做Communication Engineering,是一门重要的工学基础学科。

根据教育部《学位授予和人才培养学科目录设置与管理办法》,“通信工程”属于二级学科,归属于“信息与通信工程”一级学科之下。

%title插图%num

同属这个一级学科的,还有电子信息工程、电信工程、信息工程、软件工程、网络工程、电子科学与技术、光电信息工程、电气信息工程、物联网工程等。

通信工程的研究方向,就是通信。通信的本质,就是信息的互通。也就是说,通信工程主要研究信号的产生、发送和接收,信息的传输、交换和处理。

在国外(例如美国)的学科分类中,通信工程被认为是电子工程的重要分支。

电子工程,也就是大家经常听说的EE,和通信、电信、电子、光电、集成电路等相关。

和EE相对应的,就是CS,Computer Science(计算机科学)。

CS的研究方向,包括计算机系统、算法、人工智能、数据存储技术、软件工程、人机交互等。

简单来说,EE偏硬件、偏底层实现,而CS偏软件、偏上层应用。

这些年来,EE和CS一直都有“竞争”关系。而竞争的结果,是CS略占上风,这和行业发展趋势有很大的关系,后面我们会提到。

%title插图%num

    “通信工程”到底学些什么?   

再来看看通信工程的课程设置。

通信工程是一个典型的交叉学科专业,集现代电子技术、信息技术、通信技术为一身。因此,课程内容特别“丰富”:

%title插图%num

(点击可看大图)

国内大学的课程设置,简直就是无力吐槽。不管有用没用、有关无关,反正只要沾点边,都给你安排上,硬是凑够将近200个学分。

上图中的课程,主要分为学科基础课、专业必修课、专业选修课。从方向来看,就是五大类:软件类、硬件类、无线类、网络类、光类。

软件类:就是编程,写代码。重点课程是数据结构、软件工程概论、软件项目管理,还有C/C++、java、python等程序语言开发。

硬件类:主要是数电、模电、高频电子线路、信号与系统、数字信号处理、嵌入式开发,单片机等。再往前就是微电子、半导体、集成电路。现在没什么纯硬件,都是软件驱动硬件,搞软硬结合。所以说,硬件专业=硬件+软件。

无线类:这块其实是正宗的“通信工程”,专门研究通信中*大的瓶颈环节——无线空口(空中接口)。简单来说,无线空口就是研究如何通过无线电磁波更快更好地传输数据。它的重点课程是信号与系统、数字信号处理、电磁场与电磁波、通信原理、信息论与编码等。无线类的难度不亚于硬件类,都是掉头发的课程。

网络类:网络工程,主要是研究路由交换,和路由器、交换机、防火墙等数通设备打交道比较多。除了数据网络之外,网络类实际上还包括了系统类知识,就是和操作系统、数据库打交道,进一步来说,就是搞云计算和大数据的方向。这块和软件类一样,偏IT应用,好处是不需要什么数电模电信号处理方面的知识。

*后一类,就是光。国内有很多光电相关的专业,例如光电信息工程等。除了研究光学(镜片、透镜、激光)之外,就有很多从事光通信领域的研究,说白了,就是光纤通信。这块是通信传输网的重要领域。主要课程是物理光学、应用光学、信息光学、光电检测、激光原理等。

%title插图%num

上述五大类方向,没有人能够做到全面掌握,也没必要全学。但是国内高校又特别喜欢填鸭,会根据自己的“喜好”,从中挑选大量课程,作为通信工程的教学大纲。

所以,*大部分学生*后就是囫囵吞枣,什么都学了,什么都没学会。

相反的,有一些很实用的课程,例如项目管理、工程规范、项目概预算等,在实际工作中很实用,却在教学计划中被忽视。

如果大家不想被带偏的话,在大一的时候就要自我评估一下,自己喜欢哪个方向,适合哪个方向,然后朝这个方向努力。除非考研,不然的话,该放弃的就要学会放弃。

%title插图%num

 学“通信工程”,有哪些好大学? 

接下来,我们看看究竟哪些学校的通信比较强。

如今这个年代,但凡是个大学,就一定有计算机和电子信息工程相关的院系,也一定有计算机或通信专业。

不仅如此,这些专业的分数线还都非常高,一般都是成绩较好的同学,才有资格进入这些专业进行学习。

对于通信工程专业来说,像清华大学、浙江大学这样的中国顶级综合性大学,肯定实力很强,当然分数线也很高。

理工科院校里面,像东南大学、国防科技大学、哈尔滨工业大学、北京理工大学、北京航空航天大学,在通信方向也具有相当强的实力。

如果分数足够高,当然是哪家排名靠前,就选择哪家了。

需要特别说明的是,我们国家有一些学校,是通信和电子信息领域的专业型大学。他们致力于这个领域的人才培养和专业建设,每年为行业输送大量的毕业生。

这些学校的名字我相信大家都很熟悉,分别是:

西电(西安电子科技大学)

成电(电子科技大学)

北邮(北京邮电大学)

南邮(南京邮电大学)

西邮(西安邮电大学)

重邮(重庆邮电大学)

杭电(杭州电子科技大学)

桂电(桂林电子科技大学)

八所学校里面,实力*强的,就是俗称的“两电一邮”——西电、成电、北邮。

这些学校在中国通信界享受特殊的地位。很多通信企业的领导,还有顶尖专家,都出自这几所高校。

如果大家致力于从事通信行业,相同排名水平的情况下,建议优先选择这些学校。

%title插图%num

学“通信工程”,将来能做什么?

如下图所示:

%title插图%num

哈哈,淡定,淡定,小枣君只是给大家开一个玩笑。

学通信工程,当然毕业之后主要进入通信行业,成为一名通信工程师啦!

外人眼里的我们:

%title插图%num

现实情况的我们:

%title插图%num

通信行业,简而言之,就是围绕用户通信需求,提供通信产品和服务的行业。

通信产品和服务,大家应该都很熟悉,我们使用的手机,还有家里上网的宽带,都是其中之一。

除了面向大众的公共通信服务(移动通信、宽带接入、固定电话、IPTV等)之外,通信服务还包括很多面向行业企业的专网通信服务(例如电网通信、铁路通信、港口通信、应急通信等)。

几十年前,通信行业是很高大上的行业,技术含量高,入行门槛高,行业利润丰厚。如果你能从事通信行业,肯定收入不菲。

但是,随着科技的发展,通信技术变得越来越成熟,从事通信产品研发、生产和销售的企业也越来越多。行业竞争激烈,利润大幅下滑。通信行业从业人员的收入也大不如前。

如今,以云计算、大数据、程序开发、人工智能为代表的信息技术(也就是大家更为熟知的IT)已经超过通信技术,变成了年轻人更为热衷的就业方向。

信息技术和通信技术名义上并称为ICT行业(IT+CT),但事实上,通信正在逐渐被IT融合。

%title插图%num

通信行业的就业方向,主要包括以下几类单位:

  • 通信运营商

我们用手机上网和打电话,用的是谁的网络?运营商的。

我们的手机话费付给了谁?运营商。

是的,像中国移动、中国电信、中国联通这样的,负责建设和运营电信通信网络,并提供通信服务的企业,就是基础电信服务运营商,也简称为运营商。

注:除了移动电信联通之外,中国广电(中国广播电视网络有限公司),也属于电信运营商,大家往往会忽视这一点。而中国铁塔反而不是运营商,它是基础设施服务提供商,专门为运营商提供铁塔、站房之类的基础设施服务。

  • 通信设备商

通信运营商虽然拥有很多设备,但并不是自己制造的,而是从通信设备商采购的。

通信设备商,就是负责研发制造通信设备的厂商。像华为、中兴、爱立信、诺基亚,就是目前世界上*大的四家通信设备商。

上述四家设备商,产品线*多,种类*齐全,覆盖*广,所以也称为通信综合解决方案提供商。其它一些设备商,可能只专注于通信的某个领域,例如基站或传输设备等。

  • 分包商、供应商、集成商、代理商

通信设备的复杂度比较高,专业度也比较高,因此,安装、调试和维护的过程非常复杂,通常会以项目化的方式来运作。

这些项目如果仅靠设备商、运营商自己来做,是不可能的。所以,会有很多公司加入进来,出人出力,共同参与。这类公司,就是分包商(或者叫合作方)。

有的公司是整包,就是独自承包一个项目的工程。有的公司是分包,就是承包其中一部分。还有的公司,是承包项目之后,将一部分交由其它公司去做,就叫做转包(有时候是不允许的)。

通信行业的产业链很庞大,从原材料到元器件,再到单板、设备,会有一系列的链条。上游对下游来说,就叫供应商。做产品集成,提供整体打包解决方案的,叫集成商。

再有就是代理商,大家应该都知道,就是负责产品代理销售的公司。

综合来说,产业链如下图所示:

%title插图%num

通信行业还包括政府部门(工信部、通管局)、研究院所(信通院、设计院、中电下属院所)、高校等。限于篇幅,今天就不一一介绍了。

这些单位里面,目前来看,四大设备商的待遇*好。运营商是国企,*稳定。其它公司日子不是特别好,除非在细分领域做到了顶尖。

%title插图%num

到底要不要报考“通信工程”?

*后一个问题,也是*直击灵魂的问题——到底要不要报考“通信工程”?

如果我说要,那么很多人会骂我是误人子弟。如果我说不要,更多的人会骂我是通信行业的千古罪人。

总而言之,里外不是人。

之所以很多通信人选择“劝退”通信,原因很简单——通信行业工作很辛苦,加班多,熬夜多,收入待遇却很低,技术更新快,竞争压力大,吃青春饭。再加上通信整体不景气,下滑趋势明显,没有发展前途……等等。

%title插图%num

选择“支持”通信的理由也很有道理——现在到处都在搞5G,搞万物互联,搞新基建,从国家政策导向和市场发展前景来说,通信是重点推动的方向,战略意义显著。

那么,究竟该如何理解通信行业的利与弊呢?

我个人的看法如下——

一个年轻人选择行业,应该紧跟时代的步伐,把握历史的机遇。说世俗一点,稀缺性决定价值,这个社会未来十年*需要什么,什么*赚钱,就该优先选择什么。(当然,个人理想是*前提。)

人类社会的进步,和工业革命有密切的联系。前三次工业革命,相关技术和行业都得到了迅猛的发展,也都很赚钱,例如第三次工业革命的计算机和信息技术,还有我们通信技术。

如今,我们站在第四次工业革命的面前,当然要重点关注第四次工业革命的代表性技术。是什么呢?石墨烯,基因工程,虚拟现实,人工智能,量子信息技术,可控核聚变、清洁能源以及生物技术。这里面,虚拟现实、人工智能和量子信息技术,都和信息通信有紧密关联。

除了高大上的方向,还要结合中国的现实情况。中国作为发展中国家,企业发展差异很大,有的步子快,已经开始拥抱第四次工业革命,也有的步子慢,第三次工业革命才刚刚入门。

所以,未来的十到二十年,数字化、信息化、网络化、智能化,是我们国家发展战略的基调。推动数字经济,推动企业数字化转型,是生产力升级的主要任务。

现在*热门的5G、物联网、云计算、大数据、人工智能,都属于信息通信(ICT)领域,都服务于上述目标。

因此,信息通信一定会继续是未来的热门方向。信息通信背后的计算机科学、电子电气工程、通信工程、网络工程等专业,也将继续保持热门。

这些方向进行横向对比,人工智能当然是*热门的,但是门槛很高,不学到博士的话,价值体现不出来。很多学校本科开设人工智能专业,纯粹是蹭热点。

软件开发,做码农,门槛低,就业面广,好找工作。但是,做的人很多,竞争很激烈,想要出人头地也不容易。

硬件专业,因为现在物联网发展迅速,很多行业都开始推万物互联,会有大量的行业物联终端开发需求,还有很多消费电子类的终端开发需求,例如无人机无人车等,这块也有不错的前景。此外,微电子、半导体、集成电路也出自这个专业,压准国家现在重视芯片的大趋势,也很有搞头。

无线专业,从事研发的门槛高,就业面比较狭窄。但是如果做到头部的话,待遇可观。

网络专业,受云计算和大数据带动,人才需求缺口比较大。但门槛比较低,培养起来比较快,竞争愈发激烈。发展方向主要是系统架构师等,长远来说,适合学渣逆袭。

光通信专业,产业链很庞大,通信在用,数据中心也在用,完美贴合新基建。从技术来说,也还存在很大的发展空间,值得进入。但底层的收益率很低,还是要努力爬到上游高端企业。

大家报考通信工程,可以在上述方向做二次选择。

信息通信这个一级学科下,各个二级学科的课程差异并不是很大。换句话说,本科阶段,只要你是信息通信大类的专业,具体是什么二类学科并不重要。相比之下,学校的名字更重要。

如果你想干通信,当前形势下,压力会比较大,发展前景不是很乐观,必须努力进入头部企业。

如果你不想干通信,没问题,反正软件、硬件、网络都学了,跳槽去互联网公司,OK的。如果想转人工智能、芯片半导体,只要你本科期间偏重这些方向,考研跨二类专业,也OK。

ESL:我们如何使用首云混合云产品实现提效降本

背景

ESL Play是世界上*大也是历史悠久的电子竞技独立联盟,成立于1997年。ESL Play负责组织和举办电子竞技赛事,并提供在线直播。在所有电子竞技平台中,收看时间长期位居行业*。其举办赛事覆盖PS、PC、移动端等多个平台。

ESL Asia是ESL Play负责亚洲区的下属机构,负责覆盖亚洲区的电子竞技业务,其直播业务需要使用到大量的计算和网络资源。在此前,因为一些历史原因,ESL Asia的工作负载部署在多样的IT环境中,其中包括私有化的数据中心(以VMware和物理机为主)和以AWS为主的公有云,在基础资源层面容易形成一个个的信息孤岛,工作负载无法在各个环境之间灵活调度和流通,无法做到精细化的基础资源管理和成本控制。除此以外,IT管理部门还面临着以下这些技术和管理上的挑战。

%title插图%num

业务需求

  • 稳定与弹性:

ESL的在线业务平台,需要有安全、稳定、高性能的后台系统和支持弹性、多地域部署的前端系统相结合,因此只有混合云架构能够提供理想的解决方案。

  • 高可用与数据安全:

混合云架构的私有化部署部分,部署了大量数据库应用,要求*高的可用性和数据安全保障。

  • 运营、运维可视化管理:

在混合云架构中,需要有较强的运营、运维能力支撑,和丰富的可视化视图,以实现资源的实时监控与管理调度。

  • 云主机实时跨云迁移:

ESL Asia在AWS上有大量的存量云主机实例,需要与私有环境进行网络的互联互通和虚拟机实时迁移调度。

  • 托管式运维:

ESL Asia的技术团队缺少运维底层资源的人员和经验,需要服务商提供包括计算、存储、网络、云管平台在内的一站式全托管运维服务,以保证客户的技术力量可以专注于自身业务领域。

经过多种产品和方案的对比,ESL Asia*终选择了首都在线的首云混合云产品,使用其中基于VMware的托管私有云用于部署新的业务,并通过一些专用于混合云场景的组件,和原有IT环境构建为一个大的混合云,让企业在面对复杂IT环境时,具备了精细化管理基础资源和灵活部署工作负载的能力。

%title插图%num

首云混合云产品

首云混合云产品,是基于自身的公有云节点物理环境,加上多种VMware虚拟化软件所构建。包括了计算、存储、网络虚拟化和运维运营管理平台,是目前世界上部署较为广泛,备受客户信赖的虚拟化基础架构。其核心组件包括vSphere、vSAN、NSX-T、vRealize Suite。分别提供计算虚拟化、分布式存储虚拟化、网络虚拟化和安全、以及运维运营管理工具。

%title插图%num

以上这些组件,构成了一个类似于VMware on AWS的托管私有云服务,可提供包括基础硬件到虚拟化层,以及上层运营运维管理工具的线上全托管私有云平台,客户可独占物理设备,独享网络、存储资源,另外可借助首都在线遍布全球多地的数据中心,将自己的工作负载部署在任何首都在线节点位置。同时首都在线可根据客户自身的技术能力与运维需求,提供定制化的运维服务,通常情况下,可以为客户提供一站式的全托管服务,即整个物理层、虚拟化层和运维管理全部交由首都在线负责,客户只需专注自身业务和应用即可。

除此以外,针对混合云使用场景,首都在线在托管私有云之上还整合了VMware的HCX组件,实现了Any to Any的混合云工作负载迁移调度。除VMware vSphere平台之间(如私有化VMware环境,或VMware on AWS等)跨版本的大规模工作负载迁移外,HCX还能够支持将KVM和Hyper-V转换为任何vSphere版本。HCX基于vMotion技术实现跨云迁移,在网络质量有保证的情况下,可以做到和vSphere Cluster内部一样管理跨云迁移的体验,*大规模可支持1000个虚拟机的并行迁移,可实现零停机迁移或有限的业务中断。同时借助vMotion的安全代理机制,可保证数据在跨云传输时不会发生数据丢失或泄露。

%title插图%num

%title插图%num

首云混合云如何解决客户的挑战

下面我们具体的讲一下,客户如何使用首云混合云来解决前面提到的一系列难题与挑战。

  • 托管私有云平台:

提供计算、存储、网络资源专属隔离的私有云环境,具有良好的性能和安全稳定保障。

  • 天然混合架构:

首都在线的托管私有云平台,和首都在线公有云使用一致的VMware虚拟化技术,天然底层同构,可实现统一管理、调度、迁移和灾备等多种混合云功能场景,同时借助HCX可实现跨多种虚拟化平台的多云迁移场景。

  • 高可用和数据安全:

由VMware的vSphere、NSX-T、vSAN构成的计算、网络、存储全套虚拟化解决方案,通过软件定义的方式实现了业务无中断的虚拟资源高可用保障,同时vSAN的超融合和多副本存储策略可以提供可靠的数据安全保证。

  • 运营、运维支撑能力:

由VMware的vRealize Suite套件,提供包括资源成本分析、虚拟机生命周期自动化管理、审批流程、第三方应用嵌入与编排、可视化运维监控、自定义DashBoard和运维分析报告等运营、运维支撑能力。

  • 全托管式运维服务:

首都在线具有经验丰富的云计算和VMware软件运维团队,可提供软件、硬件、网络一体化的7*24全托管运维服务,以及针对VIP客户的专人定制化运维服务。

云计算和人工智能有何关系 究竟哪个更有前途

云计算和人工智能有何关系?究竟哪个更有前途?云计算、人工智能是近几年来新兴的技术,很多人模糊的了解二者关系密切,但却缺少实质性的知识理解。接下来就给大家揭秘云计算和人工智能之间的关系。

%title插图%num

云计算主要是通过互联网为用户提供各种服务,针对于不同的用户可以提供IaaS、PaaS和SaaS三种服务。人工智能可以简单的理解为一个感知和决策的过程,发展需要三个重要的基础,分别是数据、算力和算法,而云计算是提供算力的重要途径,所以云计算可以看成是人工智能发展的基础。

就应用来说,云计算提供强大的数据分析能力,人工智能有强大的仿生能力,同时可以通过人工智能技术获取到用户需求,将需求通过云计算进行分析。通过互联网数据的分析得到自己需要的那一部分,可以说是因为人工智能与云计算的存在,人们获取到自己的需求变得越来越方便,使得生活变得更加便利。

在第八届中国国际石油贸易大会上,商务部部长助理任鸿斌表示,将推动能源与云计算、大数据、互联网和移动应用和人工智能等信息技术、智能技术的深度融合,促进智慧能源的发展。

有人好奇云计算和人工智能究竟学哪个更有前途?其实这完全依赖于你的兴趣以及努力。无论你是学习云计算还是人工智能都可以拿到不错的薪资,前提是你所掌握的技术能够满足企业的需求。