工作碰上的技术问题及处理经验(三)

续上一篇随笔: https://www.cnblogs.com/kingstarer/p/8469016.html 《工作碰上的技术问题及处理经验》(二)

我这人记忆力比较差,经常出现有些知识学了不久后就忘了,或者有些问题花了很多时间百度解决后,再过一段时间碰上时只有模糊印象,却忘了具体解决方法。

最近几年工作时我开始有意识地把登记每天工作碰上的技术问题做个简单笔记。

一般上班时间比较忙,只能草草记了一两句话。等过一段时间,我会把这个笔记整理一下,把问题和处理经验整理通顺,以加深自己的印象。

20180425:
    source insight 4里面高亮某个单词可以按F8,UE里面高亮可以用shitf+双击单词,vs里面默认没法高亮某个单词。
不过网上有很多扩展插件可以实现这个功能,我就装了一个:" Highlight all occurrences of selected word"
    今天用filezilla上传一个文件,总是上传不成功,但提示为什么不成功,让我有点摸不着头脑。后来偶然发现原来是因为服务器硬盘满了。filezilla这点做得不太好,出错提示太不清楚了。
    make -n 可以用来调试makefile,它能显示makefile实际执行的编译命令(只打印,不执行)。今天一个同事说他修改的代码编译后没生效,我就让他用make -n看一下是不是实际执行了编译。他看了一下编译命令,才发现他.h文件,然而对应的.c文件并没有依赖于该.h,导致执行make后没有重新编译对应的.c,所以代码没生效。make clean后重新编译就好。
    修改了.h后记得make clean,因为很多makefile写的时候都只依赖.c/.cpp,不依赖.h

20180502:
    今天学了一个查看IO使用状态的命令:iostat -dmx2

20180504:
    shell的变量与环境变量的区别:都可以使用${变量名}获取变量值,但有 export的变量是环境变量,环境变量会被子进程继承,但普通shell变量不会。

20180508:
    今天在调试程序时发现程序行为飘忽不定,修改的一个bug有时生效,有时不生效。后来才发现由于我系统里面把.放在PATH环境变量第一位,导致启动程序时默认先启动当前目录下的程序。
    而我的测试环境,有好几个目录都放了一个同名的程序。如果不幸在非最新版本的程序目录下启动程序测试,则会出错。
    一般来说,最好不要把.做为PATH第一位

20180510:
    今天用vs编译代码时报这个错:
    ">dbstbl.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失"。
    网上查了一下,是因为代码格式是UTF-8,并且里面有中文。而vs是不支持这种格式的代码的,需要在文件高级保存选项,把文件格式改为“UTF8带签名”

20180517:
    /*宏里面写死了使用变量stMyInf 现在想调用这个宏,但变量名不一样*/
    #define stMyInf (*pStMyInf)
        GET_AR_INF();
    #undef stMyInf

20180520:
    secureCRT设置屏幕显示黑底绿字模式方法:
    options->sessionoptions->emulation->terminal 选择vt100
    options->sessionoptions->appearance->Current color scheme 选择traditional

    secureCRT设置屏幕显示linux彩色方法:
    options->sessionoptions->emulation->terminal
    把终端类型 从vt100改为xterm 并且钩选ansi color复选框

20180521:
    今天发现程序从数据库取出来的数据,结尾总是会多出很多空格。原来以为是因为字段是char类型缘故,
但后来发现不是,字段类型是varchar2。后来发现由于取数时,用char类型数组,其实应该用varchar才对(我们的数据库操作是用pro*c)。
或者在程序开头使用EXEC SQL VAR强制转换,如下例子:
EXEC SQL BEGIN DECLARE SECTION;
char ename[11];
EXEC SQL VAR ac_ename IS STRING(11);
EXEC SQL END DECLARE SECTION;
    这个用法在oracle官方的proc开发文档里面有详细介绍,建议大家开发proc程序前先浏览一遍。(全英的,看起来比较痛苦,但值得)

20180604:
    今天出现了一个substr截取字符串时出现半个中文的问题:utf8中文一般是3个字节,gbk中文是2个字节,但substr截取时是按字节截断,所以很可能出现截断了中文字符的问题。
    这个问题可以通过自己写一个substr解决了,之前的开发人员写代码时没考虑到这点。

20180620:
    我个人比较熟悉awk,所以经常需要在windows上使用awk处理一些数据。
之前一直使用unxutils工具包里面的gawk.exe,但最近发现它有两个问题:1 处理的文件行数超过651132时容易出现bug
2 输出中文时只能重定向到文件,不然会报错。
    我尝试过直接下载gnuwin里面的gawk,发现也有这个问题。这个问题我暂时没有找到解决方法。

    今天被oracle的lengthb函数坑了一把:我一直以为lengthb返回的应该是数字,如果传入空字符串,返回的应该是0。实际上,如果字符串是NULL,lengthb返回的是NULL。

20180626:
    sed命令使用正则时需要转义,如:sed ‘s/abc\|def/xxx/g‘ 

    如果ftp连接服务器失败,可以在服务患儿使用/sbin/service vsftpd status看看ftp服务是否有启动。如果启动了还是连接失败,可以看看是不是使用了非标准的ftp端口
    netstat -anp|grep -w LISTEN

20180628:
    今天碰上一个bug是由于snprintf函数引起的。原因是snprintf返回可能超过输入在缓冲区的长度(当缓冲区能完整容纳输出的字符串,snprintf函数返回往缓冲区写入的字符数,否则返回缓冲区应该有多长才能容纳输出字符串),而代码没有对这种情况做判断,导致越界。

20180701:
    gdb单步跟踪时,如果碰上比较长的循环,一步步跟很累人。可以试试使用until命令,让程序运行到指定代码行时停下来。
    gdb调试过程中,可以使用call命令执行函数。例如运行过程中想退出程序,可以用call exit(0)。

    今天又碰上strncpy没有以\0结尾导致出现bug的情况。

20180702:
    字符集和字符集编码区别:
    Unicode是字符集,UTF8编码是对表示字符集里面字符的一种编码规则,GB18030也是一种编码

20180705:
    今天碰上一个问题,程序core后在当前目录找不到corefile。用ulimit -a和ulimit -c看都没有限制corefile文件大小。
后来偶然间发现corefile生成在了另一个目录下面,原来是在/proc/sys/kernel/core_pattern里面配置的corefile命名规则里面把路径写死了,所以不会在当前目录生成。
    gdb调试多进程时可以用set follow-fork-mode parent/child 来确定fork后跟踪父进程还是子进程。

20180709:
    今天碰上信号处理函数里面打印日志,导致进程死锁的问题。之前一直以为多线程才会有重入问题,没想到单进程也会出现这种问题。

20180710:
    \t默认是补齐8位,但它跟用空格补齐不一样,虽然光标会后移到满8位为止,但

20180711:
    今天才知道oracle有insert all的语法,作用是把同一批数据插入到不同的表中。
insert all
into t1(object_name,object_id)
into t2(object_name,object_id)
select * from t;

insert first
when object_id = 1 then
into t1(object_name,object_id)
when object_id <=5 then
into t2(object_name,object_id)
select * from t;

20180713:
    ue搜索替换时可以使用特殊字符 ^p(换行) ^t(tab)

20180715:
    今天注意到项目里面的接入进程实现跟我以前做的项目不大一样。以前做的多进程接入功能是先打开一个socket并且在主进程进程bind之后linsten,然后fork多个子进程同时accept等待连接进来并处理。
现在项目的多进程接入实现是使用SO_REUSEPORT选项,该选项使用多个socket可以同时绑定同一个监听端口。这样就不需要先启动主进程再fork子进程了,直接同时启动多个接入进程就行。每个进程都会新开一个socket完整执行bind->linsten->accept。百度查了一下,说这个特性实现的多socket共享端口接入服务器性能比传统的父子进程共享同个socket的效率高一点。

原文地址:https://www.cnblogs.com/kingstarer/p/11355612.html

时间: 2024-08-02 00:05:43

工作碰上的技术问题及处理经验(三)的相关文章

工作碰上的技术问题及处理经验(二)

续上一篇随笔: https://www.cnblogs.com/kingstarer/p/8469016.html <工作碰上的技术问题及处理经验> 由于内容有很多空格,如果直接在正文粘贴,发表后空格会消失,导致版本看起来比较难看. 所以我把主要内容做为代码发表. 我觉得每天把工作碰上的问题做一个简单的笔记挺不错的,一来可以锻炼自己的表达能力,二来也方便自己以后复查,因为以后工作很可能再碰上同样的问题. 由于我每次记录笔记时,可能只是记录了关键字,而要发出来做为共享随笔,只有这些关键字肯定是不

成为成功技术领导的十条经验

编者按:InfoQ开设新栏目“品味书香”,精选技术书籍的精彩章节,以及分享看完书留下的思考和收获,欢迎大家关注.本文节选自软件领域著名专家Gerald M. Weinberg著<成为技术领导者:掌握全面解决问题的途径>中的章节“激励他人的第二大障碍”,讨论了成功技术领导的一些经验. 如果你带领的团队必须完成某个任务,而任务现在面临困境,你愿意: a.优先考虑任务 b.优先考虑人 c.平衡人和任务 d.逃避 e.上述无一可选择 上面的问题出自一本管理教科书.简单来说,它代表了领导的常见困境:任务

AJAX 概念 优势 发展前景 工作原理 底层技术 状态 缺点 框架

1. 概念 Ajax asynchronous JavaScript and XML , 异步js和xml. 这种解释已经过时了, 现在ajax就是, 允许浏览器和服务器通信, 而无需刷新当前页面的技术. 它本来是微软的技术, 是Google 在 google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax的流行.事实上google目前在ajax技术方面的领先是微软所无法达到的 2. 发展前景 Gmail在收发邮件的时候已经和Outlook Ex

空格App亿元A轮融资背后:云上多场景技术架构实践与经验

直播视频: (点击图片观看) 幻灯片下载地址:https://oss.aliyuncs.com/yqfiles/382bc642fc0b621a9368138a74d8fd36.pdf 3月16日云栖社区在线实时分享顺利结束,本次由空格APP技术合伙人刘博分享了空格利用阿里云服务在搜索.推荐和数据挖掘业务场景下的探索实践.本次视频直播的整理文章.视频整理完毕,如下内容. 阿里云在空格 图一 空格服务端整体架构 在空格初始创业阶段,人员十分缺乏,但依靠着阿里云,空格两周便实现APP上线.空格服务端

【程序人生】那些工作之外的技术挣钱方式

那些工作之外的技术挣钱方式 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com Overview 挣钱,左边是手,意味着你需要用双手去辛苦劳动获取报酬: 赚钱,左边是贝,意味着你可以通过钱再生钱. 本文先为大家推荐一些技术挣钱方式. 私活 线上(海外).freelancer,odesk,elance等. 线上(国内).CSTO, 码市,智城外包,实现网,猪八戒(泛)等. 熟人介绍,个人影响力,QQ群等. 写作 写博客.个人博客经营. 文章投稿.如InfoQ投稿(稿费

如何成为优秀的技术Leader?做到这三点就够了

? 技术主管,又叫技术经理,英文一般是 Tech Leader ,简称 TL.随着工作经验的不断积累,能力的不断提升,每个人都有机会成为 Team Leader. 然而在机会到来前,我们必须提前做好准备,对 TL 的工作职责有一定了解.当然,这也会为当下更好地配合 TL 工作打下基础. 今天,阿里巴巴高级技术专家云狄将结合自己多年的经验,从以下三个角度出发,分享对技术 TL 这一角色的理解与思考: 开发规范 开发流程 技术规划与管理 技术主管是开发团队中的某位程序员需要对一起创建系统的整个开发团

《大型网站技术架构》读书笔记三:大型网站核心架构要素

一.性能—响应时间决定用户 (1)浏览器端: ①浏览器缓存: ②使用页面压缩: PS:Gzip压缩效率非常高,通常可以达到70%的压缩率,也就是说,如果你的网页有30K,压缩之后就变成了9K左右.想要启用Gzip压缩,提高浏览速度,可以浏览这篇文章:http://www.chinaz.com/web/2012/1017/278682.shtml ③合理布局页面: CSS:把样式表置于顶部:避免使用CSS表达式(expression_r):使用外部JavaScript和CSS:削减JavaScri

分布式技术追踪 2018年第三十一期

分布式技术追踪 2018年第三十一期 分布式系统实践 1. Google's New Book: The Site Reliability Workbook http://highscalability.com/blog/2018/7/25/googles-new-book-the-site-reliability-workbook.html 摘要: Google关于SRE的第二本书, 相对第一本来说更具有实践性. 2. DPaxos : 如何降低Paxos延迟 https://mp.weixi

公开运维技术分享的一些经验

技术分享三条实战经验: ● 良好的逻辑性 ● 自己真实经验总结 ● 多练习 首先,说明下,我不是技术分享高手,分享了次数比较多,有点心得:另外,听的分享多了,对好坏也有一些感受. 还有,在此特别感谢下西山居的运维开发架构师,<Puppet实战>的作者刘宇,我的许多分享经验来自于宇哥,并且得到了宇哥多次的,一对一贴身的,手把手的指点. 一 什么是成功的技术分享 判断分享是否成功,关键是看自己要传递的想法,有没有被听众理解和接受,技术分享不是川普竞选,不追求热闹的效果,也不追求所有人都能听懂,一次