首先,反转函数reverse的字面意思就是反向输出输入的字符串
在沅江等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、网站建设、外贸网站建设 网站设计制作按需策划设计,公司网站建设,企业网站建设,品牌网站建设,网络营销推广,成都外贸网站制作,沅江网站建设费用合理。
例子如下:
select reverse('abcd')
----
dcba
其次,数据库索引中的反向索引(reverse)在某些特定情况下可以极大的优化执行效率。
比如对于哈希分布的数据列 100001,100004,100010,100008,103009
如果用常规索引,其数据可能分布在同一个块上,查询效率低
如果用反向索引能很好的均匀分布在各个数据块上,能更好的运用数据库的并行度
总体而言,该函数不常用,但是能在需要优化的情况下多一个方法也是不错的
先按照 / 解析,放到定义的表里面,然后再倒着读出来 你可以用下面的函数解析 create function String_split(@SourceSql varchar(8000),@StrSeprate varchar(10)) returns @temp table(a varchar(100)) --实现split功能 的函数 --date :2003-10-14 as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@SourceSql) while @i=1 begin insert @temp values(left(@SourceSql,@i-1)) set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i) set @i=charindex(@StrSeprate,@SourceSql) end if @SourceSql'' insert @temp values(@SourceSql) return end
select reverse(substring(reverse('[SH:81%]'),PATINDEX('%[0-9]%',reverse('[SH:80%]')),2))
select reverse(substring(reverse('[SY:20%]'),PATINDEX('%[0-9]%',reverse('[SY:20%]')),2))
reverse是反转函数
substring是截取函数
这条语句意思是反转截取从一个数字开始,保留两位(里面有几个数字就填几,这里是两位就是2 如果写成3就会截取“18:”)截取后再反向输出。这个只适用于数字连在一起的,如果不连在一起需要写存储过程。
希望能帮到您!
本文介绍 64 位 SQLServer HotfixInstaller 用于独立实例和聚集实例的 SQL Server 2000 (64 位) 上应用 SQL Server 2000 64 位修补程序。 作为 MicrosoftWindowsInstaller 修补程序打包和传递到用户作为自解压缩可执行文件创建 SQL Server 2000 (64 位) 修复程序。 也可以按无人参与模式来修复安装过程自动将整个组织中运行 HotfixInstaller。
如果您需要应用修补程序是 SQL Server 2000 32 位, 实例请参阅下列 Microsoft 知识库文章:
842960 ( ) 描述 SQL Server 7.0 和 SQL Server 2000 32 - bit HotfixInstaller
回到顶端
如何命名修复程序安装文件
Microsoft 已经采用标准化命名架构为 SQLServer 中修复安装程序包。
有关新命名架构对于 MicrosoftSQLServer 软件更新包, 请单击下列文章编号以查看 Microsoft 知识库中相应:
822499 ( ) 对于 SQLServer Microsoft 软件更新包新命名方案
回到顶端
如何使用 HotfixInstaller
以开始修复安装过程, 必须通过具有本地管理凭据, 用户帐户登录到计算机, 然后运行自解压缩可执行文件。 当您运行自解压缩可执行文件, 与修补程序相关的文件是从修复程序包提取并存储在计算机上。 如果您运行自解压缩可执行文件, 时遇到磁盘空间错误请参阅以下 MicrosoftKnowledgeBase 文章:
301913 ( ) BUG: 错误消息: " 驱动器上没有足够空间所有 " 当您提取 SQL Server 2000 下载
当您启动修复安装过程, 启动一个基于 GUI 的修复程序安装工具, 并且 GUI 指导您完成其余的安装过程。
回到顶端
HotfixInstaller 工作原理
当作为自解压缩可执行文件, 运行打包 HotfixInstaller HotfixInstaller 执行下列操作:
HotfixInstaller 提取, 打包在自解压缩可执行文件到临时文件夹, 它类似于以下文件:
%windir%\ GUID
HotfixInstaller 验证计算机的体系结构。 如果要安装, 对计算机体系结构没有资格针对修补程序可能会收到 HotfixInstaller 无效信息。 例如, 当您尝试运行 HotfixInstaller, 是编译到计算机上与 x 86 结构, IA-64 结构上运行您可能收到消息, 它类似于以下:
Hotfix.exe 是应用不有效 Win 32 程序。
HotfixInstaller 可确保用户帐户, 用于登录到计算机具有管理凭据。 如果用户帐户没有管理凭据, 可能会收到是类似于以下消息:
为了运行此更新, 您必须登录到此计算机使用一个具有管理员特权帐户。
HotfixInstaller 验证计算机上运行该操作系统 如果操作系统不符合修复程序, 不可能会收到是类似于以下信息:
修补安装程序正在运行, 适用于其他操作系统并且不支持在此操作系统上。 要继续, 下载产品修补程序在此操作系统然后重试安装。
HotfixInstaller 自动检测所有的 SQLServer 实例并枚举实例符合修复程序列表。 您可能会看到所有计算机上正在运行的 SQLServer 实例出现在 GUI 的安装程序。 从列表, 可以选择您想要应用修复程序实例的子集。 GUI 的安装程序, 中的 SQLServer 实例执行不符合此修复程序将不可用。 您无法选择那些的 SQLServer 实例。
若要针对修补程序, 限定 SQLServer 安装必须满足某些要求。 例如, 如果修复程序需要安装 SQL Server 2000 Service Pack 3 (SP 3), 必须之前运行修补程序安装 SQL Server 2000 SP 3。
如果个 SQLServer 实例执行不符合此修复程序因为修复程序没有资格, 可能会收到所与以下类似的消息:
由于与 SQLServer 服务包需求, 此机器没有产品匹配此安装包。 以继续, 引用发行说明中安装程序包要求, 安装要求 SQLServer 服务包, 然后再运行安装。
由于与 SQLServer 语言兼容需求, 此机器没有产品匹配此安装包。 要继续, 您必须下载并运行安装包匹配区域设置的计算机。
由于要 SQLServer 版本要求, 此计算机没有产品匹配此安装包。 要继续, 指向用于此安装发行说明。 您必须运行安装包与要更新 SQLServer 实例不兼容。
注意 : Microsoft 知识库文章针对每个修补程序包含对应用修复程序要求更多信息。
HotfixInstaller 可检测该群集的 SQLServer 实例并确定其中 HotfixInstaller 正在运行计算机是否活动节点。
将 HotfixInstaller 提示您输入与您用来连接到 SQLServer 的实例验证信息。 例如, HotfixInstaller 提示您输入 Windows 身份验证或 SQLServer 身份验证信息。 如果使用 SQLServer 身份验证, 必须为系统管理员 (sa) 用户帐户提供密码。 如果要使用 SQLServer 身份验证, 必须确保为混合模式安全性配置的 SQLServer 实例。
如果使用 Windows 身份验证, 您必须是登录到计算机通过使用的帐户是系统管理员服务器角色对于 SQLServer, 升级的实例的一部分上。 如果身份验证信息是不正确, 您可能收到是类似于以下消息:
无法对一个或多个实例验证帐户信息。
确保您能连接到所有选定实例使用提供帐户信息。
进行进一步取消连接无法建立到实例。
如果选择的 SQLServer, 群集, 一个实例和实例是活动节点, 将提示输入是用于连接到的 SQLServer 实例验证信息后 HotfixInstaller 提示您输入远程登录信息。
HotfixInstaller 停止同时 MSSQLSERVER 服务和针对该实例正在升级, SQLServer 代理服务。 如果正在更新 SQL Server 2000 Analysis Services, MSSQLServerOLAPService 服务已停止。
如果由其他服务或进程, 是要替换由 HotfixInstaller 文件被锁定可能会收到错误消息, 它类似于下面:
当前锁定下列文件。
为了防止末的修补程序安装过程, 必要重新关闭所有其他应用程序之前。
PathToFileName1 \ FileName1
PathToFileName2 \ FileName1
如果您单击消息框, 中 取消 修复安装停止。 您可关闭程序, 导致锁文件上, 然后单击 尝试再次 以继续修复安装。 如果执行不知道程序引起锁, 请单击 继续 以继续修复安装。 此修复程序成功安装, 后会提示重新启动计算机。
注意 您执行不总是收到此错误信息因为某些文件可能不能锁定进行检查时。 HotfixInstaller 尝试更新对应将来或者修复程序文件时可能被锁定文件。
如果 HotfixInstaller 决定是锁定文件, 必须通过 HotfixInstaller 更换, HotfixInstaller 无法替换这些文件。 因此, HotfixInstaller 添加这些文件 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenames 注册表项。 这种情况时, 收到警告消息, 它类似于下面:
在计算机上存在挂起文件操作。
建议您重新启动计算机, 尽管这些执行不影响通过安装, 修补文件。
如果您收到此消息, 只有您重新启动计算机已不完成修复安装。 重新启动您的计算机, 操作系统替换文件添加到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenames 计算机, 上注册表项和然后清除此注册表项。
如果收到警告, 重新启动计算机在结尾处修复安装, 建议, 重新启动计算机以便所有应用程序正常工作。
与修复文件 HotfixInstaller 更新现有文件。 要这样, 程序搜索目标计算机以确保文件都存在。 如果文件存在于目标计算机上, 文件可被替换。 传递此检查, 文件后文件版本与源文件进行比较。 如果源文件版本晚于版本的文件正在由 HotfixInstaller, 安装 HotfixInstaller 不替换文件。 对于没有版本号, 文件程序使用时间和日期信息来创建安装文件的列表。
对系统数据库所有必需文件是更新成功, 后 HotfixInstaller 运行脚本。
如何在群集上应用修复程序
如果您选择的 SQLServer 群集, 一个实例并实例是活动节点, HotfixInstaller 提示输入远程登录信息。 为连接到远程节点并运行远程进程使用远程登录信息。 HotfixInstaller 使 SQLServer 群集组脱机并更新二进制群集的所有被动节点上。 远程进程用于更新群集的被动节点。
注意 如果 HotfixInstaller, 是不活动节点, 节点上运行详细信息窗格显示, 它类似于以下消息:
来自主动节点必须运行此安装。 从被动节点运行它。
若要继续, 取消安装, 再次运行它来自主动节点。
回到顶端
如何执行无人参与安装
与交互式安装使用 HotfixInstaller " 如何 " 部分中描述无人参与安装很相似。 要开始一个无人参与安装的修复程序, 您可使用命令行参数和对应于该修复程序自解压执行文件。
运行自解压缩可执行文件对应到在命令提示符处, 修补程序时可使用以下命令行参数:
/ 修复安装以显示有关命令行开关可导致此命令行参数 ? :
/ quiet : 使修复程序安装到以静默模式运行此命令行参数。
此命令行参数可用于提供的所有实例的 SQL Server 2000 在安装此修复程序之前 (64 - bit), 包括版本号、 ServicePack 级别、 语言和修复级别, 快照 / reportonly:。
如果您想要所有符合修复程序的 SQLServer 实例上应用此修复程序使用此命令行参数 allinstances /:
: 此命令行参数用于指定 SQLServer 要应用此修复程序的实例 = YourInstanceName , 例如) / / INSTANCENAME (INSTANCENAME。 如果要多实例, 上应用此修复程序可以使用逗号分隔符来分隔实例名称 (INSTANCENAME = InstanceName1 InstanceName2 、 InstanceName3 , 例如) /。 修补程序符合实例上如果一个或多个实例 " 列表中不存在或者执行不符合修复程序, HotfixInstaller 只安装修复程序。
: 此命令行参数用于指定用户帐户用于连接到群集的所有节点 USER / 此帐户必须是本地管理员帐户一个所有节点。
: 此命令行参数用于指定是为 指定用户帐户密码 PASSWORD / USER 参数 /
: 此命令行参数用于指定密码用于连接到要运行 SQL 脚本的 SQLServer 实例 SAPWD / 如果未指定开关, HotfixInstaller 自动使用 Windows 验证。 如果用户密码 sa 是空白, 只需要指定 / SAPWD 命令行中。
命令行示例
用于修复程序的 SQLServer 默认实例上的无人参与安装以下命令行语法:
SQL2000-KB840223-v8.00.0931-ia64-ENU.exe /quiet
因为没有身份验证信息, 命令行中提供使用默认 Windows 身份验证登录信息。
用于命名实例的 SQLServer 版本 (其中 InstanceName 是名称的实例的 SQLServer 安装修复程序) 上修复程序的无人参与安装以下命令行语法:
SQL2000-KB840223-v8.00.0931-ia64-ENU.exe /quiet /INSTANCENAME=InstanceName /SAPWD=MyPwd
注意 : 安装可能不成功如果 INSTANCENAME 参数 ServerName 中提供 \ InstanceName 格式。
回到顶端
用于 HotfixInstaller 日志文件
是对应于修复安装日志文件中记录由修复安装进程执行操作。 修复安装日志文件都保存 %windir%\Hotfix 文件夹中。
Hotfix.log 文件是当前日志文件, 包含常规的修复程序安装状态。 根据是否正在运行 HotfixInstaller 对于 (64 - bit) SQL Server 2000 或用于 AnalysisServices (64 位), HotfixInstaller 可看到以下在同一个位置之一:
如果正在运行 HotfixInstaller 用于 SQL Server 2000 (64 位), 命名 SQL64 文件夹包含以下三种类型的日志文件:
SQL64_Hotfix_ KBnumber _.log: 此日志文件包含特定细节是与应用该修复程序。 例如, 此文件包含有关实例的 SQLServer 版本, 其中安装修复程序, 在命令行用来安装此修复程序, 并修复安装的结果信息。
SQL64_Hotfix_ KBnumber _sqlrun.msp.log: 此日志文件包含了 WindowsInstaller 日志输出。
SQL64_Hotfix_ KBnumber _ 脚本名 .log: 此日志文件包含作为修复安装的一部分执行脚本的输出日志。 作为修复安装的一部分执行每个脚本具有脚本输出日志。
如果正在运行用于 AnalysisServices HotfixInstaller (64 位), 命名 OLAP64 文件夹包含以下三种类型的日志文件:
OLAP64_Hotfix_ KBnumber _.log: 此日志文件包含特定细节是与应用该修复程序。 例如, 此文件包含有关的 SQLServer 安装修复程序, 命令行用来安装此修复程序, 实例和修复安装的结果信息。
OLAP64_Hotfix_ KBnumber _sqlrun.msp.log: 此日志文件包含了 WindowsInstaller 日志输出。
OLAP64_Hotfix_ KBnumber _ 脚本名 .log: 此日志文件包含作为一部分修复应用程序执行该脚本的输出日志。 作为修复安装的一部分执行每个脚本具有脚本输出日志。
回到顶端
如何删除修复程序安装
从计算机删除修复程序正在安装的 SQLServer 实例上。 对于每个修复程序安装, 入口点是可用于删除修复程序控制面板中创建。 控制面板中添加或删除程序窗口显示计算机上安装该修补程序。 要删除修复程序安装, 请单击用于修复安装添加或删除程序 " 窗口中 删除 或 更改/删除 。 当您尝试删除安装修复程序回滚初始化。
因为 SQL Server 2000 修补程序生成 977 用作基准, 可比生成 977 您计算机上安装任何修复程序是以后修复生成时回滚。 要删除每个修复程序版本是以后比生成 977 逆页序回修复生成 977。 无法 注意 如果计算机没有 WindowsInstaller 版本 3.0 运行其上安装您从计算机删除修复安装。
当您执行修复回滚, 计算机还原到存在您安装此修复程序之前状态。 期间回滚, 安装程序重新安装备份文件、 反转注册表键操作, 对应反向脚本运行以安装, 期间所使用的 SQL 脚本并运行反向流程以反转安装期间所做的更改。
用于登录到计算机, 用户帐户必须拥有管理凭据以删除修复程序。
如果试图删除版本是早于当前版本的 SQLServer, 实例上安装修复程序的回滚未初始化。
回滚和群集中删除
聚集实例, 上 HotfixInstaller 决定是否实例是活动节点, 和从群集然后删除修补程序。
注意 您无法启动对修复从被动节点群集的删除。
希望采纳
一个IT人士的个人经历,给迷失方向的朋友
这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能给刚如行的朋友们一点点帮助。
一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS、数据库,应用程序,做过通信软件、硬件驱动、协议栈,到现在做操作系统内核和IC相关开发,这中间走了很多弯路,也吃了不少苦。
我上的是一个三流的高校,就连同一个城市的人多数都不知道。因为学校不好也就没有指望能靠学校名气找一个好工作。所有的希望都寄托在自己的努力上了,大一开学前的假期我就开始了学习,记得我买的第一本书是《计算机基础DOS3.0》,大家别吓着了,其实当时已经普及了DOS6.22了,只是我在书店里看到了DOS4.0,5.0,6.0的书,以为像英语那样是第四、五、六册,记得当时到处找DOS1.0,现在想想也幸好我没有找到:)开学前我学完了PASCAL,那时既没有计算机也没有人可以请教,我连程序是什么的概念都没有,只好死记硬背代码,然后拿纸写,我一直到大三才有了一台486,在这之前用纸写了多少程序我也记不清楚了,只知道最长的一个我拿A4大小的草稿纸写了30多页,我的C语言、C++、VC都是在这样的条件下入门的。所以说条件是可以克服的,希望我的经历多少给条件艰苦的同学们一点信心。第一次上机是在我姐夫的机房,我的心情激动的无与伦比,但是一上机我立刻傻了眼,他们用的是英文版的Win3.1,我的那点DOS知识都见了鬼,上机提心吊胆的一阵瞎摸,一不小心把Word弄成了全屏,怎么都还不了原,当时真是心急如焚,我以机器被我弄坏了。第一个C语言程序,就是那个经典的HelloWorld,我调了几个星期,上机机会非常少,也没有书告诉我开发环境(TC2.0)需要设置,而且开始我都不知道有编译器,我甚至自作聪明把写好的程序扩展名从.c改成.exe,结果可想而知。
大一学完了C、X86的汇编、数据结构、C++。由于精力都花在自学上了,大一下四门课挂了彩,三类学校就是这点好,挂上一二十门也照样毕业。不过扯远点说,我那么刻苦都及不了格,可见我们国家的计算机教育有多死板。
大二准备学VC和BC,当时难以取舍,后来选了VC,不为别的,只为书店里两本书,VC那本便宜6块钱。我的努力在班上无人能及,学的日夜不分,大三有了计算机后更是如此,很多次父亲半夜教训我说我不要命了,我一直觉得自己基础差,记忆又不行,条件也不好 ,所以觉得只有多花点时间才能赶上别人。居然后来有许多朋友说我有学计算机的天赋,让我哭笑不得。我用的是486,16M内存,1G硬盘,当时同学们的配置都是P166MMX,我安装一个Windows NT4.0需要一个通宵,编译一个BC5.0向导生成的程序需要近两个小时,我的显示器是个二手的,辐射非常大,开机屏幕冒火花,看起来很酷的:),有一次程序写的太久,觉得怎么白色的编辑器背景变成了紫色,以为显示器坏了,后来才发现眼睛不行了,不过说来也奇怪,到今天我的视力还能保持1.5,真是个奇迹。但是就是那台破机器陪伴我两年,让我学会了VC、Delphi、SQLServer等。后来那台机器给我阿姨打字用,据她说一天她正打的开心,一股青烟夹着火苗从显示器钻出来,之后它才寿终正寝。
大三假期找了个机会在一个计算机研究所实习,与其说实习不如说是做义工,工作了两个月一分钱没有拿。但是这两个月对我的发展帮助很大,让我早一步了解了社会,刚去的时候我当然是一窍不通,在那里我熟悉了网络,学会了Delphi和Oracle。由于工作很认真,得到了比较好的评价,在一位长者的引荐下,我开始和他们一起做项目,这使我在大三大四就有了自己的收入,大四又找了两家MIS公司兼职,虽然钱不多,但是在学生期间有1000多的收入我已经非常满足了,我终于用自己赚的钱把计算机换了。大四下开始找工作,这时我的工作经验已经比较多(当然现在想想非常幼稚),开始听父母的想去那个研究所,实习过那个部门也希望我能去,但是不知道为什么最后不了了之,这种单位就是比较官僚,我一气之下就到了我兼职的一个公司做MIS的TeamLeader。在大三到毕业一年的时间,做过了各种MIS,从煤气、烟厂、公安、铁路、饮食到高校,什么有钱做什么,工作也很辛苦,经常加班和熬通宵,从跟客户谈需求到设计、编码、测试、交付都要上。那时觉得很有成就感,觉得自己还不错,现在想想真是很肤浅。
刚走上工作岗位的学生很容易被误导,各种开发工具让人眼花缭乱,同时也觉得很受公司器重,但这样工作永远是一个低层次的开发者。不要跟我说什么系统分析有多么多么重要,多么多么难。你以为自己跟用户谈需求做设计就是系统分析和设计了吗,国内又有几个公司能够做的很到位很规范?我是ISO9000内审员,也在Rational公司受过多次培训,拿了4个证书,还有一个公司让我去做CMM。这些我听过很多,但是很多事情到内就变了性质,一个公司不是通过了ISO9000或者CMM就能规范了,我现在在一家有几十年历史的外企工作,里面的管理不是一般国内企业能及的。作为一个毕业不久以前没有步入过社会的学生,几乎不可能在很短的时间掌握系统分析和设计,面向对象、UML只是一个工具,关键是人本身的思想,不是说你熟悉了C++、Rose就能够做出好的设计,相反如果你具备了很高的素质,你可以用C写出比别人用C++更加模块化的程序。
话说远一些,国内软件开发行业有一个怪圈,很多人觉得VC Delphi VB,真是很搞笑。这几个软件我都做过开发,说白了他们都是工具,应该根据应用的需要选择采用哪个,而不是觉得哪个上层次。如果你因为用某个开发工具很有面子而选择的话,只能说明你很浅薄。如果说层次,那么这些工具都不上层次,因为它们用来用去都是一些系统的API,微软的朋友不会因为你记住他们多少个API或者多少个类就会觉得你很了不起,你永远只是他们的客户,他们看重的是你口袋里的银子。我也做过系统内核,我也封装过很多API,同样我也不会看重那些使用这些API做二次开发的客户,除非他能够作出自己独到的设计。
至于有人认为C++ C那更是让人笑掉大牙,不妨你去打听一下,现在有几个操作系统内核是用C++写的,又有几个实时系统用的是C++,当然我也不是说C++不好,但是目前的内核和实时系统中C++还无法与C匹敌,至于说C++适合做应用系统的开发那是另外一回事。所以我的观点是不在于你用什么工具和语言,而在于你干什么工作。你的设计体现了你的技术层次。
这样干了一年我觉得非常苦闷,做的大多数都是熟练工种的活,个人技术上没有太多的提高也看不到方向。所以决定离开这个城市去上海,寻求更好的发展,并且打算放弃我以前的MIS转到通信行业。
写到这里不能不提到我女朋友,我们是在来上海前半年认识的,她大四在我公司实习,公司派她给我写文档,我们的感情发展的很快。她告诉我很多事情,她家原本是改革开放的第一批暴发户,她母亲爱打牌,输掉了几百万,还欠了很多债,她有男朋友,但是她对他没有感情,只因为他给了她母亲两万多块钱,后来还强迫她写了四万块的借条,她男朋友背叛过她并且不止一次打她,现在逼她结婚不然就要她还钱。这人居然还是一个高校的老师!她母亲把父亲给她的学费花了,因为拖欠学费她没有办法拿到毕业证。她母亲现在有病需要钱,我拿出了自己的一点积蓄并且跟朋友们接了一些,替她交了学费并给她母亲看病(后来才知道看病的钱又不知所终,就连她母亲是不是有病我都不知道,但她也是没有办法)。这个时候我家知道了一些事情,坚决反对我和她在一起,她原来的男朋友也极力破坏。无奈之下我们决定早一定离开这个伤心的城市,并且瞒着我们家。由于时间仓促,我只准备了4000块钱,她仅有的几百块钱也被她母亲要去了,我买了三张票,一张是中午的,两张是晚上的,中午我的家人把我送上船,他们一离开我就下了船,我和她乘坐晚上的船离开了这个我和她生活了很多年的城市,带走的只是一身债务。没有来过上海的我们两个性倔强,都不愿意去麻烦同学和朋友。来到上海是傍晚6点半,我们都不知道该去哪里,我们找了一个20块钱的旅馆,这个房间连窗户都没有,7月份的天气酷热难耐,房间里非常闷热。第二天我们开始租房子,因为身上的钱不多,我们基本都是步行,花了一个星期时间,不知道在浦东转了多少圈后找到了一个400块的房子,但是我们都 不了解上海是付三压一,还要付半个月的中介费,买了一些锅碗瓢盆后,我们身上只有800块钱了,工作都还没有着落,这800块钱要支持到我们拿到第一个月工资,为了省钱我们自己做饭,每天买菜只花两块钱,她非常喜欢吃(也可能她在大学经常挨饿的愿意),看到她现在这样省吃俭用我真的很不忍心。她以前的男朋友也没有放过她,经常打电话来骚扰,并且来上海看她,还说了不少恐吓她的话,她过于善良,说他以前毕竟帮助过她,叫我不要与他一般见识。以后的每天在家就是苦等面试通知,原本我想迅速找一家MIS公司解决眼前的困难,但是她坚持让我不要放弃自己的理想,终于功夫不负有心人,我找到了一家通信公司,4000块的工资虽然赶不上MIS公司给我开出的价位,但也够在上海生存。她也找到了工作,第一天上班她哭了,这是她来上海第一次流泪,我心里很难受也很感动。
由于是全新的行业,我把自己降到了零点,我学的VC、Delphi、数据库派不上用场,摆在我面前的是嵌入式、协议、信令一些我从未接触过的知识。我知道我没有退路,于是拼命的学习,我把自己当做一个应届毕业生一样,一分努力一分收获,半年过去我终于熟 悉了工作,并且得到了公司的表彰,薪水也加了一级。后面的日子里我们省吃俭用,把欠朋友的1万多块钱还了,日子终于上了正轨。这时女朋友告诉我她想考研究生,我也很支持,于是她辞职在家备考。
另外,在这里我要感谢我的ProjectManager,他原来是一个大通信公司的产品经理,对人非常和善,我从他那里学到了很多知识,而且他也给了我许许多多无私的帮助。在工作上他给我充分的空间和信任。记得公司安排我维护一个接入服务器软件,由于代码量不算太小(5万行),资料和文档都不齐全,我维护起来非常吃力,所以想重新把它做一遍,公司领导不太支持,可能觉得工作量太大,但是他极力支持我,私下里他让我放手去做,我的维护工作他挤时间做。在他的支持下,我花了半年时间完成了接入服务器的软件,并 且实现了一个相对完整的TCP/IP协议栈。在这里我学会了嵌入式系统设计、驱动开发、TCP/IP和很多通信的知识,我花了一年时间终于使自己从MIS开发转到了通信行业,并且站稳了脚跟。我的开发大量是对硬件的直接操作,不再受微软的操作系统,VC、Delhpi这些开发工具的约束,我终于看到了另外一片天空。
我做事情喜欢追根问底,随着开发的深入,软件开发与硬件联系越来越紧密,硬件知识的匮乏又对我的发展产生了障碍,而且芯片技术基本上掌握在国外公司的手里,这对做系统级设计是一个非常大的制约,一个新产品出来,第一道利润(也往往是最丰厚的利润)常常都被IC公司如Intel、Motorola赚去了,国内的厂商只能喝点汤。所以我决心解决自己的硬件技术障碍,并打算离开通信行业,进入IC设计相关领域。
当然我明白如果我对硬件了解的非常少,没有哪家IC公司会仁慈到招我这样一个一窍不通的人来培训。所以我必须努力打好基础,学一些相关知识为以后做准备。就像我开始从MIS转到通信一样,我看过大量通信方面的书,并且给一个ISP做过RADIUS计费分拣台,在这样的背景下这家通信公司才给了我这个机会。我在的通信公司是做系统设计的,有不少PCB Layout硬件人员,平常我就注意向他们学习,由于我做的是软件,在公司看硬件资料不好意思,所以开始只好在家看,刚来上海工作我连续一年都在加班,后来不加了,因为我要挤出时间学习,通常我12点左右睡,第二天5点半起,我上班比较早,地铁上如果人不多 我也用来看书。学习当然不会是一帆风顺的,有些实在不懂的问题就积累起来问硬件人员,他们的帮助使我学习进度快了很多,因为在没有人点拨的情况下自学,我的一半时间是 花在解决疑难问题上,但这种问题经常是别人的一句话就可以让我豁然开朗,我非常庆幸我有这样的学习环境。在后面的一年里,我学会了看硬件原理图,学会了简单的硬件设计
(模拟电路方面还有不小的差距),事情就是这样的,当你安安份份做软件,别人永远认为你是软件开发人员,在你开始学习硬件时别人未必会认同,有位中兴通讯的朋友还对我说过,一个人不可能把所有东西都学完。我也明白这一点,但我希望自己做的更好。但当你熟悉硬件后大家又会觉得你好像原本就是软硬件都懂的,同事们也都习以为常了。这个时候我可以把硬件资料堂堂正正的拿到公司看,没有人再大惊小怪了。让我比较自豪的是我通过自己的努力做了一个IAD(软交换的终端设备)系统方案,包含软硬件的选型、设计等内容,这
个方案得到了公司和同事们的认同,让我感到非常欣慰。
技术是相辅相成的,当我的硬件有了一定的进步后,我的软件设计也有了很大的提高 ,我可以从更深层次理解问题,我做的接入服务器CPU是Motorola PowerPC860,熟悉的朋 友都知道860 QMC与软件的批量数据传输通常采用BD表的方式,硬件人员做驱动的时候习惯 采用固定BD表,每接收或发送数据都将数据从BD表拷贝到用户Buffer,或从用户Buffer拷 贝到BD表,由于理解的比较深入,我自己重新实现了这个过程,采用动态BD表的方式,驱动从一个网口接收数据,提交给我的软件进行三层交换,直至从另外的接口发送出去,没 有进行一次拷贝。这样的设计大大提高了性能,使系统的指标接近理论值。软硬件的结合使我的设计水平上了一个台阶。我现在写的这个操作系统,编译后我把程序反编译成汇编,找出其中不优化的代码,然后在C程序中进行调整。举个例子,很多CPU没有专门的乘法指令,这个大家应该都知道,在这种CPU上进行一个乘法操作常常会花费大量的指令周期,有的朋友会说这个我知道,我会尽量避免采用×号,但是事情往往不是那么简单,你知道 C语言中数组的下标操作是怎么实现的吗?仔细看看反汇编的代码你就会明白,同样是通过下标的定位操作,C编译器会有时候会产生位移指令,但有时候会用乘法实现,两者效率往往是天壤之别,所以明白这些问题你才能将系统性能提升到极致。这些问题就不多说了,有兴趣的话以后可以共同探讨。
话说远一点,我由衷的希望在软件上做的比较深入的朋友们有机会学学硬件以及其它 相关知识,尤其是做底层开发和嵌入式设计的。这对软件技术的提高有非常大的帮助,否 则很多事情你只知道该这样但不会明白为什么该这样。我这个观点在我现在的IC公司Proj ect Manager那里也得到了验证。他告诉我们公司现在802.11芯片产品的软件经理原本是 做该芯片硬件设计的,某某某原本是做软件的,现在在做IC,类似的例子还有很多,只是在国内这样的风气不是非常流行。
我有一些心得体会与大家分享,只有当我干好本职工作后,我才会学习与工作关系不 大的技术,这样公司的上司才不至于反感,在入门阶段的问题我通常不去问那些资深人士 ,而是问一些资历比较浅的朋友,比如刚毕业不久的学生,因为他们往往会跟你详细的讲 解,而资深人士通常觉得你的问题太简单,所以回答的也很简单,我又不好意思多问。等 技术上了一定的层次后我才会问他们,他们也能给你比较深入的回答。另外,有些朋友说我机会比较好,他们也希望能从事新的工作可惜没有机会,我听了只有苦笑,我的机会了 解的人都应该知道,我没有出生在什么IT世家:)也没有谁一路提拔我,所有的路都是自 己走出来的,我母亲去世比较早,我的后母(我叫她阿姨)看着我努力过来的,一次她看我大年30还在写程序,她说像我这样努力木头都能学出来。
我的最终目的是IC而不是PCB,所以我下一步的准备开始学习IC设计的知识。公司的同 事没有懂IC设计的,后面的路又要靠自己了,我买了不少相关的书,在网上也查了很多的 资料,我花了大量的时间去学习VHDL,并且用软件进行了一些简单的设计和仿真(没有设 计ASIC,只是针对FPGA),随着学习的深入,我渐渐明白了IC设计的基本流程,同时也明 白了这条路的艰辛。这个时候我已经做好了跳槽的准备,我向一家业界又一定知名度的IC设计公司投了简历,并通过了漫长的面试(4个多小时)。其他的一切我都比较满意,唯独薪资差强人意,我也明白原因,因为我是这个行业的新人,我没有经验,我再一次将自清零了。公司老板问我6000多一个月能不能接受,我知道他也是照章办事。想想我通信行业的朋友们,基本上都是年薪10万以上,月薪过万的也比比皆是,朋友们也帮我介绍了不 少待遇不错的公司,我该怎么选择,当时我很犹豫,我热爱我的事业,我向往我的追求,但我也是一个普通的人,我也需要养家糊口,我也想早一点买房买车。生活给我出了一道难题。
爱因斯坦在63岁时说过一个人没有在30岁以前达成科学上的最大成就,那他永远也不会有。这句话给了我很大的压力和震动,我马上就26岁了,离30只有四年时间,我必须抓紧这几年宝贵的时间,努力达到我技术上的最高峰。为了这个理想,为了能离自己的梦更近一些,我选择了这家IC公司,我明白自己的薪资和公司刚进来的硕士研究生相差无几,但为了今后的发展只能忍受,一切又得重新开始。换行业是一个非常痛苦的过程,尤其从一个春风得意的位置换到一个陌生的岗位,感觉象从温暖的被子里钻出来跳进冰水中,让人难以接受。在原来那家通信公司,我是唯一两年时间涨了五次工资的员工,公司和同事 都给了我极大的认可,工作上也常常被委以重任。但现在这一切都成了过去,在新的公司 我只是一个新人,没有人知道也没有人在意我过去的成绩。我决定重新开始,我把自己看作 新毕业的学生,我要用自己的努力得到公司的认可。进入新的行业是非常痛苦的,我告诉自己必须忍受这一切,虽然外面有很多诱惑,但是既然作出了选择我就不允许自己轻易放
弃。
我现在已经在这家新公司上了一个多月的班,开始非常艰难,现在慢慢适应了。第一 个月结束时,Team Leader找我谈话,说我是新进员工中最优秀的一个,我心里很欣慰,这也算对我努力的一个肯定吧。在这里还要感谢我的女朋友,她给了我很大的支持和鼓舞, 每次在我动摇的时候她都在鼓励我,让我坚持自己的理想,刚来上海是她让我不要勉强去 做MIS,这次也是她让我顶住了月薪过万的诱惑,没有她我可能不会有今天的成绩。现在的公司有自己的操作系统,自己的CPU、DSP和其它芯片,在这里我能学到世界上 最先进的技术,我们的设计开发不再完全依赖别人的硬件和系统,这让我很开心。我打算等工作步入正轨后,全力学习新的知识,实现我的理想。
在后面的两年里我给自己定下了几个目标:
一.努力做好本职工作,在工作上得到公司和同事们的认同;
二.努力学习IC硬件设计知识,多向同事请教,并利用一切机会多实践;
三.实现我的实时操作系统的主要部分,完成TCP/IP协议栈模块,并免费发布源代码;
四.和我女朋友结婚并买一套小房子,这是最重要的,因为我明白事业是可以重来的,但是珍贵的感情很难失而复得。
在这里提一下我现在开发的操作系统,它是一个实时嵌入式系统,目前支持以下特性:
a.支持时间片轮转调度和基于优先级调度,最多64个优先级;
b.抢占式实时内核;
c.为了便于移植,主体用标准C实现;
d.汇编代码非常少,不到100行;
e.支持任务管理,各任务有独立的堆栈;
f.进程同步和通信目前完成了Semaphore,Message Queue正在调试;
g.实现了定时系统调用;
h.可以在windows上仿真调试
我还打算下一步实现优先级反转保护,Event Flag,Data Pipe,内存管理(以前实现过) 、驱动接口等。在这之后我还会努力完善它,比如加入文件系统,协议栈、调试接口等。希望朋友们提出自己的意见和建议,在此不胜感激!
后记:
就像有的朋友说的,我的经历或许会给一些朋友产生误导,在这里我必须说明一下。我来上海以前学习过于拼命,常常晚上只睡3个多小时,我身高1米71,那时只有108斤(我 现在130多),家人也说我这样拼命活不过60岁,但是当时的我太固执,我对他们说只要能 实现理想活50岁我就够了。那时的拼命使我的身体受到了影响,有一次早上突然腰肌剧痛难忍,痛的我倒在床上站不起来。虽然我现在已经比较注意,但有时候还会隐隐作痛。后来在女朋友说服了我,来上海以后我不再如此。我经常引用父亲的一句话身体是革命的本钱。
而且我也发现拼命不是办法,我可以熬一两个通宵,最多的一次我连续工作了三天三夜, 但是我半个月都没有恢复过来,这样是不是得不偿失?学习工作应该是一个长期的过程, 像马拉松而不是百米冲刺。我现在非常注意调整学习和工作的强度,我要保证每天尽量有 相对充沛的精力,一些年轻的朋友觉得自己也应该拼命努力,这让我多少有些担心,如果我的故事能让你在学习工作上多一点兴趣,我会感到很开心,但如果误导了某些朋友,让你做一些不值得的付出,我会感到很内疚。
技术没有贵贱只分,我以前换行业是因为自己的兴趣所致,而不是对哪个行业有什么偏见。我希望我的经历不要给朋友一个错误的导向,觉得我始终向更高的技术发展。其实各行各业做到顶尖都是很困难的。话又说回来虽然技术没有贵贱,但是门槛是有高低的,无论如何,做IC的门槛要比做网页的高,这一点无可否认。国家各种人才都是需要的,但是作为个人奋发向上的想法还是应该有的,努力在自己喜欢的行业上做的更好,而不应该停留在比较肤浅的层次上。
我是一个自己觉得比较有自知之明的人,或许我最大的优点就是知道自己有很多缺点 :)。我的故事中很多的曲折和错误都是由我的缺点造成的,希望大家用审慎的眼光看待 我的经历,不要被我的花言巧语所迷惑。我学习有些随心所欲,这给我带来了无尽的麻烦,也大大阻碍的我的发展。记得我小时候成绩比较出色,但是后来学习严重偏科,导 致我中学成绩一再滑坡,也没有考上什么好的学校,小时候的一个朋友,当时的成绩和我相仿,但是没有我这个缺点,她上了清华,后来在去了美国深造,在一个著名导师手下研究理论科学,这未尝不是一条更好的出路。另外我的学习方法也是在不断改善中的,过去的学习过于讲究数量和时间,那样学习既苦而已效率不高,现在我非常注意学习的效率和技巧,这样才是学习的捷径(当然不是指投机取巧),比如说学一相对陌生的技术,如果有条件,不妨问一问有经验的人,不需要问很多,往往他不经意的几句话会给你非常大的帮助,甚至超过你看一个星期的书。带着这样的思想再去学习你会节省很多时间,这样何乐不为呢?这些年中我学了不少的东西,由于开始非常盲目,所以学的东西杂乱无章,现在回想起来让我啼笑皆非,我把大量的时间浪费在一些没有必要深入了解的知识上,毕竟一个人的精力是有限度的。很多朋友很我一样都背过五笔字形,的确它是个不错的输入法,但是对一个研发人员它绝对不值得你去背,你的时间应该花在有价值的地方。我这样的事情还做过很多,我背过CCED、WPS的命令和快捷键,在dBase基本退出历史舞台后我还花了很多时间去学习它的使用。所以我的学习在前期缺乏规划,没有明确的短期目的、中期目标,只有一个虚无飘渺的长期的理想。这就像做设计一样,好的设计是从需求抽象到代码有很多过程,而不能得到了需求就立刻开始开始编码。
当然这么些年的学习和工作多多少少有些收获,下面我说说我的一些学习的心得,这些方法未必正确,我也在不断探索和改进中。我的学习和工作有相对明确的目标,我不会一时心动而去学习某一技术,在下决定之前我会考虑很多,包括长期的发展,个人路线的规划,需要付出的代价、可能遇到的困难及解决的办法等等,在决定后还会制定更加明确 的计划,包括短期、中期和长期的,身边可以利用到的资源(包括好的书籍、资料、软硬件环境,也包括有经验的朋友或者师长),以及每一个阶段是怎么过渡到高一阶段的计划 ,往往在一个学习阶段一旦上路后会走的相对顺利,但是跨阶段通常比较麻烦,比如从学 习基础知识转到实践。另外我买书也有自己的方法,现在世面上高质量的书远不如低质量书多,对于一个陌生的技术,往往在第一次买书会选择错误,即使买到一本好书但是它的方向也未必适合你,所以我通常会先在网上查找一些该技术的介绍,有了一点点概念后再去买一本比较薄、相对便宜并且内容相对泛泛而谈的书,这是国内作者最善于写的书:) ,再把它浏览一遍后我就会基本明白这门技术的要点,后面买书和制定计划就会明确的多 。否则一开始就想找本好书往往比较困难,而且买回来后努力学习,有时候学了一半才发现是本低质量的书或者是相对过时技术,让人非常懊恼。另外让有经验的人帮你介绍,通常也是一个不错的选择。
其实设计的风格有很多,比如我们现在最常见的简约风格、扁平化风格等。当然作为一个设计师除了要掌握已经流行的风格,还要对正在悄悄萌芽的风格有一定的了解。比如说以下几种风格:
一、新拟物化
新拟物化是2020年处于风口浪尖的一种视觉风格,新拟物化从最初诞生到现在,已经有一定的改变了,并且在向着更加复杂、完善的方向发展,有着更为良好的可访问性,开始具备更多拟物化的设计特征,但是更加新鲜、现代,并且更能渲染出独特的氛围感。
二、柔和渐变
渐变这种设计趋势正在进入两极分化的一个阶段。一方面,在视觉设计领域,一部分渐变变得更加夸张,但是在 UI 设计领域,无论是背景、UI元素(比如按钮、卡片和图形),渐变依然存在,只不过会显得更加微妙柔和。
在 UI 设计领域,还有的设计师会使用双色渐变,并且结合模糊效果,让它更加柔和。
三、几何元素
几何元素既可以作为背景来使用,也可以作为装饰细节,让你的设计越来越有趣。几何元素在最近几年受到的关注非常多,在设计上的应用也颇为广泛,甚至有人将几何元素拼接成为马赛克,最终呈现出来的视觉效果非常酷!
四、色调柔和背景
很多令人惊艳的、轻巧且极富美学价值的背景设计,它们用明亮柔和的色彩铺满背景,展现出极强的色彩和搭配的技巧。使用色调柔和的背景能够让整个设计都显得现代而沉静,清新,让内容真正抓住用户的注意力。
五、插画和3D元素
插画毫无疑问是非常流行的。不过,不论是配色还是视觉风格,无论是什么样的插画风格,最终的目标依然是要契合产品和 UI,所以很多插画都选择了相对扁平的风格,或者选择模拟类似3D的视觉外观。相比于每个数字项目都在使用的免费图片,插画真的是向前走出了一大步!
六、抽象图形
和传统的规则的几何图形不同,抽象而不规则的图形可以让界面显得更加不拘一格和好玩,更通俗的来讲,就是让 UI 界面更加「有机」,我认为这是一件好事。使用钢笔工具在原始的圆形和矩形上进行编辑,尝试不同的轮廓,承载不同的颜色和渐变效果,最后生成的效果会非常有趣。如果你不想去自己绘制,可以尝试一下 Blobmaker 这个工具,能够帮你节省时间~
七、深色模式
深色模式在这2年绝对是人所共知的一个设计风尚了,如今的深色模式 UI 设计已经深入到各个不同的应用。简单来说他是整个界面配色反转之后的效果,便于用户在深夜更轻松地浏览界面信息。只不过在具体的设计实施上,深色模式远不是简单的色彩反转就可以实施的,有很多注意事项,尤其是在对比度控制上。
八、倾斜角度
最初大家在 Dribbble 上会倾向于使用非标准的排版布局方式来呈现UI界面,后来这种展现方式开始逐渐在实际的设计项目中应用开来。在实际的设计当中,绝大多数情况下都会挑选30度到50度之间的倾斜角度。这种方法非常不错,可以多尝试。
九、弥散的阴影
阴影是拟物化设计当中最重要的视觉元素之一,而如今它又再次大规模流行开来了。只不过相比于之前「沉重」的阴影,柔和的弥散阴影在美学上更加令人愉悦,通常,阴影会让 UI 元素的「可点击感」更强,并且有助于区分界面中的层次结构。
十、简约加粗的字体
实际上早在 iOS 7 的时代,曾经一度流行过笔触纤细且字体宽度比较窄的字体,不过很庆幸这个时代过去了。现在所流行的字体更加讲究字体的可读性,字体的外轮廓都大体趋近于正方形,外观显得更加大气而现代。以上就是正在流行或者将要流行的UI设计风格,希望对你有所帮助!