自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 C++ “an incomplete type” error(使用extern const 数组的问题)

        开发中遇到一个问题,要做的事情是这样事的,在File_1.cpp定义了一个const的数组,在File_2.cpp中需要使用这个数组。File_1.cpp// 声明和定义extern const int s_data[] = {1, 2, 3};File_2.cpp// 声明extern const int s_data[];// 某函数使用```cppint num = sizeof(s

2021-03-06 10:37:46 677

原创 漂们,你还能回家吗?

  每年到这年关的时候,网络上大部分都是回家过年的信息,火车票多么难买,各地春节的风俗,还有垃圾广告,孩子年前告诉父母,今年不能回家过年,父母在除夕做好了年夜饭,不动筷子,这时候孩子从外面回来后拥抱,一家高兴的场面。冷清的各地,由于游子的返回,饭店商店人满为患,游子在为长辈和晚辈买着衣服和礼物,反正就是没有自己的。父母希望游子和漂们回家过年,和家里的老人团聚,给家里的亲戚,送上礼物,给小朋友送上红包。那首《常回家看看》,更是一首催泪弹,让每个游子恨不能肋生双翅,不能马上飞回到家。  各位漂们和游子,是希望

2021-01-31 11:03:43 322 3

原创 我真的没有中奖体质

命里缺钱的我,为什么从来没有中过奖。中奖由天,不由我。  还有两个星期,马上过年了。公司尾牙都安排在春节前的第二个星期的周四或者周五。没有疫情的时候,公司都会找一个饭店,吃一顿饭,还有各个部门安排的节目,最重要的是抽奖,最小的奖的大概有200元,最大的奖应该在3000-4000元,还有一些现金奖,我记得最大的是5000元。每个人都会发一个当年生肖的布偶,春联,红包袋什么的。来公司8,9年了,连一个最小的奖都没有得过,十分的郁闷。虽然公司领导总是讲,这抽奖都是娱乐,不要太放在心上。但是时间这么长了,都没有

2021-01-31 10:14:08 607

原创 C/C++ strtok()是线程不安全

最近发生一题,通过使用hwasan发现了一个问题,指示代码使用了非法内存。通过代码和dump一直查不到原因,问题指示的是使用的内存被释放了。函数传入参数后,马上使用按asprinf copy了一份,之后进行处理。而外部内存释放的地方也是改函数执行后,才会被free。log显示asprintf的函数copy的string没有问题,问题点在一个循环中,循环有处理前面asprintf,在某次处理中才出现的问题。这题非常奇怪,请了很多人帮忙看,一直都没有看出问题原因,最后排查了所有可能的问题,最后值落到了strto

2020-12-17 20:45:25 2228 1

原创 Android Looper Message Priority(send message at time)

       Android在native层也提供了Looper机制,文件如下:/system/core/libutils/Looper.cpp       最近在看相关的code的时候,有一段关于Message priority的patch,需求是能够设置Message的priority,优先级高的priority要比优先级低的优先处理。对Message的处理完

2020-10-11 15:22:37 292

原创 远去的故乡

     十一回老家,感觉很陌生。这种感觉第一次感觉到那么强烈,和我记忆中的故乡大相径庭。从高中到外求学,到工作,每年只有过年或者国庆回一次老家,后来父母搬到了城里,留下的只有老宅了,回去的次数就更少了。老宅里面外面都是很高的草,从地缝里面钻出来,有的一人来高,拔都拔不下来。花费了整个早晨的时间才把草拔干净,被蚊子咬了几个包,蚊子白天也会出动呀。    屋子里还是挺干净的,开了窗透透气,进进阳光,心里突然很难受,看着前面的庭院,这么宽阔的屋子居然没有住,而自己在

2020-10-11 12:13:54 1184 7

原创 Android native RIL 如何判断线程是否是主线程?

最近遇到一个问题,需要在Android RIL层判断当前是线程是否是主线程,如果是主线程需要执行一些逻辑,如果是非主线程,那就执行另外的逻辑。下面就是简单的sample了。#include <unistd.h>pid_t thread_id = gettid();pid_t process_id = getpid();if (thread_id == process_id) { do anything;} else { do others;}另外也简单介绍一下pt

2020-08-15 12:30:02 390

原创 职场上,与同事关系

程序员,在众多职业中,与同事关系应该说是比较简单的,很多人当了程序员后,几年后,还是保持着学生的单纯,没有一丁点的社会气息。有些公司,同事之间的称呼也是同学,但无论如何,同事之间的关系也不是同学之间的关系了。和同事之间的关系无外乎几种,夫妻关系,关系融洽,一般,差。如果同事之间相互有好感,最终结婚,这种应该是同事关系的最高境界了,这种关系我是没有机会体验了,有时候也好奇,这种关系到底是怎么相处的呢?怎么由同事转变成了夫妻?如果是上下级的关系,是否是真爱呢?如果是平级的话,两人的交流话题是否到家了也会讨论

2020-06-28 15:22:34 795

原创 程序员的核心竞争力到底是什么

在激烈的竞争环境中,不被淘汰,那手中必须有两把刷子,吃饭的家伙必须要硬实。尤其是当大环境好的时候,更应该要修炼内功,以防环境恶化,饿肚子,后悔不迭,为时晚矣。 一个程序员或者软件工程师,他的核心竞争力到底是什么呢?凭什么加薪升职呢?成为技术专家,别人眼中的大牛,工作一年,十年的经验,而不是工作十年,碌碌无为,成了一年的经验。当大学毕业的时候,新人期应该是关键期,对自己后面工作的模式有着重要的影响。刚开始参加工作的时候,大部分人追求的是对业务的熟悉,对技术的追求,希望能够马上干活,证明自己的价值和能力。这个

2020-06-26 12:35:42 506

原创 软件测试的真相

开发人员都有着谜一样的自信,认为自己的代码不可能出现任何问题,如果出现问题,那肯定也不是自己的问题,而且测试自己的代码,从来不会出现问题。Tester对于本公司的开发人员的性格和开发习惯熟悉后,一般也只能测试出少数问题,而不能真正向客户那样操作进行测试。每当出现这种情况的时候,如果引入新的tester,那么问题数目一般就会突然变多,而随着开发人员和测试人员的熟络后,有开始下降。最终的客户使用起来总是问题重重。如果想让自己的产品更加健壮,更加受欢迎,我们还是要保持一颗初心,做最好的产品,服务于客户。...

2020-06-25 17:57:55 277

原创 如何避免代码毁灭人类

如果你的代码能够毁灭人类,请您不要这样做。如果你不知道你的代码是否能够毁灭人类,那就请好好看看这篇文章,之后看看自己的代码是否有可能毁灭人类,请尽快修改。谢谢。最近公司的客户遇到了大麻烦,遇到了客退,原因是设备在某天的凌晨开始不能正常工作了,重启也无效。在疫情的大环境下,这个问题可能会被放大。因为出现问题的用户是在西非某国,该国的疫情也开始爆发了,并且医疗水平都很有限。出现问题的用户都去维修站修理的话,会造成人员聚集,使得疫情更加严重,后面就不敢想象了,并且已经惊动了客户的大老板,客户的大老板直接向我司的

2020-06-20 12:34:29 311

原创 C union(联合体)作用——玩转 union

C语言中,union相对于struct使用的次数在大部分项目中都处于明显的劣势,这和union的存储方式的特性有很大的关系。在union中,所有的字段都有相同的偏移量,而且所有的字段都是相互重叠的,union的大小是其中最大字段的大小。那我们就知道,如果所有的字段是相互重叠的,那改变其中任何一个字段的值,其他字段的值都会受到影响,也会发生变化。这就造成union在实际使用中使用的频率不会那么高,甚...

2020-04-18 15:06:45 10577 1

原创 [code defect]evaluates to an address that could be at negative offset of an array

最近公司在扫code defect,自己负责的代码有报出问题,下面是code的samplechar str[10] = {0};int i = 0;for (i = 0; i < 10; i++) {// str[i] evaluates to an address that could be at negative offset of an array.str[i] = ‘c’;...

2020-04-11 12:24:59 3187

原创 工作中如何做到对事不对人

人是有感情的动物,做事情必然会带有感情和情绪在里面,喜欢热爱的,符合自己利益的,那就喜欢做;讨厌的,增加自己工作量,让自己利益受到损失,那肯定不喜欢做,有情绪,有抵抗情绪。在与人的交往,工作一段时间后,每个人的表现,工作能力,性格会给别人留下印象。自己对别人也有一个评价,这个人能力强,脾气不好,另一个人能力不强,性格非常好。这种映像一旦给人留下了,那就很难改变了。当然,我们自己也是一样的,我们给别...

2020-03-21 15:38:32 1720

原创 疫情之下的程序员和公司关系的思考

这场突如其来的疫情使得我自毕业后到现在在家过了第一次元宵节,当然没有一点节日的气氛,在家已经呆了将近20天了,临走的时候还和主管打趣,新年过后,可能回不来了,自己真是一张乌鸦嘴。在网上看到那些在家学习的同志,真是佩服不已。我是一点心情看不下去去,在电脑前面坐一会,就要看看新闻。现在还好,疫情现在缓和了很多,应该马上就能战胜疫情了。在家远程办公了一个星期,也没有什么事情。远程办公的效率真是低。2月1...

2020-02-09 17:12:22 1315

原创 提早暴露问题,做好层与层之间的责任划分

最近处理一个关于短信的问题,debug过程中有遇到一些障碍和弯路。问题是手机应该收到一条语音信箱的短信,但是一直没有收到。Modem已经上报了短信的PDU,但是framework解析之后进行dispatch失败了。对PDU的decode和dispatch都是Google AOSP的,第一感觉应该是framework应该没有问题,应该是PDU的格式不符合spec造成的,使用工具解析PDU后并没有发现...

2019-11-01 20:03:39 393

原创 C++ 使用macro create instance

最近要接手一个新的项目,项目是C++写的,里面使用了一些macro,还是有些意思的。假如现在有一个父类ParentClass,这个父类有很多子类,这些子类都需要实现一个实例化的函数,当然可以在父类中定义一个,之后子类override,使用macro可能更好些,只要做好规范,大家就照着标准写就可以了,生出来的函数都是一致的。那么我们就可以实现下面两个宏,一个是declare,一个implement...

2019-10-18 18:17:44 395

原创 失败程序员的十年总结

十年到底有多长?当我回顾过去的十年,发现好短,可以讲的事情没有几件,而且都是坏事;当我畅想未来的十年,感觉又好长,不知道路怎么走。

2019-10-13 12:44:41 18750 100

原创 GSM 7 bit encode/decode - GSM 7 bit Default alphabet and default alphabet extension table

SMS(短信)对于ASCII可显示字符需要用GSM 7 bit进行PDU的编解码。GSM 7 bit由于只用7 个bit编码字符,这样可以多存储一些字符。例如对于短信,140个字节如果编码采用8bit,那可以存储140个,但是如果采用GSM 7 bit最大可以存储160个字符,多了20个字符,这样子有可能就会节约一条短信,也会降低通信设备的压力。对于GSM 7 bit一直没有仔细学习和研究过,一...

2019-10-12 19:32:37 4803

原创 收到短信number显示unknown的问题解决和调试BUG的几个建议

今天大部分时间都在解决一个问题,tester提交了一个bug:终端设备收到一条3GPP2 SMS短信,但是UI number显示的是unknown,如下图第一感觉应该是PDU没有携带number造成的,原先就遇到过这个问题,收到的3GPP2的PDU如下:0000021002040903c69a469cdaa0a190060100088b0003200020017c21e980836a0c8e...

2019-10-10 20:34:40 1431

原创 Java Interface,abstract class和enum的比对和组合使用方法

java Interface应该是为了实现多继承而添加的,提到Interface,那就不得不说abstract class,的确abstract class和Interface有很多地方很相似,例如都是抽象,都不能实例化,implements或者extends需要实现里面全部的abstract函数。但是他们的区别也很多。区别:1 Interface中的函数默认属性是public和abstrac...

2019-09-26 20:22:43 1959

原创 C/C++ strlen参数不能为null的思考和sizeof的比对

最近C项目中遇到一个异常,查看code后发现是strlen的参数是null引起的,在调用strlen之前判断参数是否是null解决了问题。现在在具体分析一下strlen。C/C++中的strlen是比较常用的函数,用来计算字符串的长度,计算出的长度不包含结束符’\0’。下面是关于这个函数的介绍。strlen() function in cThe strlen() function calcul...

2019-09-21 18:46:13 1913 1

原创 Java字符串拼接效率的比较和对String.valueOf的思考

这两天看到的关于Java的一篇文章(《阿里资深工程师教你如何优化Java代码》)中有写到使用String.valueOf(value)代替 “” + value的建议,原因是“当要把其他对象或类型转换为字符串时,使用String.valueOf(value)比""+value的效率更高。”反例:int i = 1;String s = "" + i;正例:int i = 1;Stri...

2019-09-18 20:33:55 1873 3

原创 Java:volatile变量,synchronized和AtomicInteger的性能比较

对于Java中volatle型变量的介绍,《深入理解Java虚拟机-JVM高级特性与最佳实践(周志明 著)》介绍的比较全面和易懂,当一个变量定义为volatile之后,将具备一种特性是保证此变量对所有线程的可见性,这里的“可见性”是指当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的,而普通变量不能做到这一点,普通变量的值在线程间传递均需要通过主内存来完成,例如,线程A修改一个普通...

2019-09-12 19:10:11 1431

原创 Android Telephony RIL Request Message执行流程

Android Telephony包含了打电话,发短信,电话本,注网等,telephony framework各个module非常依赖于RILD和modem,framework的设置,设置的结果,网络的变化,打电话等都需要framework通过HIDL结果向底层请求,请求的结果通过message传回来。发送请求的时候,将message传入,等RILD返回结果后,再通过message将结果反馈出来,...

2019-09-11 17:53:00 532

原创 Android framework lock的使用总结(wait/notify/notifyAll,lock的不同情景使用)

Android framework 有大量使用synchronized/lock(wait/notify/notifyAll),最近有看到一些文件的lock机制,Google有改进,方法很巧妙,另外自己理解的也不是很透彻,希望能得到同友的指点。首先抽象出Android中使用object lock的一个最典型的例子(具体的可以参考AOSP文件UsimPhoneBookManager.java)。...

2019-09-10 21:01:10 1126 1

原创 C/C++ goto伤了我的心

C/C++程序员或者初学C/C++都会遇到goto的问题,是否该使用goto,一派是坚决抵制,坚决不用,goto使程序难以分析,并且用code证明任何goto都是不必要的,都可以进行合理替换;另一派坚持goto使程序更简洁,能够很好的统一处理程序的异常情况。针对哪种语言是最好的,以及语言中的特定性质,我从来没有倾向性,不会选择战队。每种语言都有自己适用的情形,每种性质都有存在的合理性。goto就像...

2019-09-06 18:01:49 615 2

原创 C/C++ asprintf正确使用方法,以及和sprintf的比较

最近公司开发的code defect工具,扫出很多asprintf的问题,下面是sample codeint testAsprintf(int num) { char *testStr = NULL; asprintf(&testStr, "%d", num); // use testStr doing something if (te...

2019-09-03 20:21:06 14795 1

原创 C/C++ free(NULL)的思考

最近code review的时候发现了一段magic code,free的指针指向了NULL,当时胆战心惊,第一反应就是free一个空指针会引起NE,应该和double free一个地址是同样的效果。但是冷静下来,想到这段代码是一段老code了,而且还在一直运行,应该没有问题才对,不然的话早就暴露出来了。查到C标准库free有下面的描述。**DescriptionThe C library ...

2019-08-30 15:50:44 15566 1

原创 内存碎片的生活比喻

内存碎片的产生原因以及解决的方法网络上关于这方面的文章有很多,我就不班门弄斧了。在实际生活中,有很多场景和内存碎片非常类似,作为程序员,总是联系到内存碎片以及用解决内存碎片的方法能否解决实际生活。第一种情形:食堂吃饭公司吃饭的情形其实还是很复杂的,有单身人士,有男女朋友,有闺蜜,还有一个team比较好的三四个一起吃饭,还有那种一个team都坐一起吃饭的。有的吃得快,有得吃得慢,吃完饭后,有聊闲...

2019-08-12 20:13:37 176

原创 CDMA SMS PDU全解析

首先感谢下面各位博主的文章,CDMA短信的解析我就是从下面开始的,下面这些文章对CDMA短信的解析已经有了比较详细的介绍。我这里只是介绍一些自己的经验和所得,有自己认为比较重要的地方做了一些补充,希望对大家有所帮助。https://blog.csdn.net/zx249388847/article/details/52607862https://blog.csdn.net/Arthur_zen...

2019-08-05 20:15:38 1891 1

原创 Android打印日志:Rlog和敏感信息的处理

软件工程师每天最主要的工作应该就是开发和解BUG了,而解BUG的时间应该远远高于开发的时间,无论你开发的质量有多高。可能不是你的模块引起的问题,但是需要你来帮忙分析,才能推动问题的解决。Android平台framework层打印log大部分都是采用的Rlog.java中函数族,Rlog.d,Rlog.w,Rlog.i等等。Rlog.java中提供了pii函数(personally identif...

2019-07-16 18:59:36 3195

原创 alloca的坑,不需要free

最近有公司在用tool扫code defect,例如malloc后,有没有判断分配的内存指针是否是NULL这些问题,如果没有判断,需要加一些error handling,例如assert。本人负责的一段遗留code有被扫到这个问题,有进行修改。在对函数进行review的时候,发现分配memory的函数是alloca(和calloc很相似,认为自己当时见过),使用后,并没有进行free,有检查了上下...

2019-07-08 19:02:19 1390

原创 Java 不同包(package)protected的作用

假设有两个package,一个是parent,一个是son,parent里面有一个类ParentTest,son里面有一个SonTest,SonTest继承了ParentTest,是ParentTest的子类。如果ParentTest里面有一个被protected修饰的内部类ParentInnerTest,无论是static的还是普通的内部类,那么SonTest都不能继承该内部类ParentInn...

2019-03-28 19:20:13 1484

原创 SIM Phone book

最近在学习SIM Phonebook,有一些心得,也有一些思考,分享出来,希望对大家有些帮助。了解SIM卡存储contact的一些限制,对于了解SIM phone book spec有很大的帮助。SIM卡的特点:小,慢,通用。存储内存小,读取速度慢,并且SIM卡存储和读取要有通用性,在不同设备上都能正常工作。Phonebook的基本内容如下表,包含name,number,Email等(下面只是...

2018-11-17 15:22:06 841

翻译 Lambda表达式,匿名函数,高阶函数——Kotlin

原文出处:https://kotlinlang.org/docs/reference/lambdas.html#higher-order-functions挑选了原文中的高阶函数,Lambda表达式和匿名函数两个小章节。高阶函数高阶函数可以将函数作为参数,或者可以返回一个函数作为返回值。这有一个关于集合的例子,有两个参数,初始累积值和组合函数,通过将当前累积值和每个集合元素组合,替换累积值...

2018-10-22 10:41:39 641

翻译 函数式编程——闭包

原文链接:https://stackoverflow.com/questions/36636/what-is-a-closure原文中的sample code是JavaScript写的,本文已经替换为Kotlin。Question闭包(closure)是什么?我问一个关于柯里化(currying)和闭包的问题。闭包是什么?它和柯里化如何联系到一起的?闭包到底是什么呢?有人说闭包是函数,有...

2018-10-19 09:03:16 1128

原创 函数式编程-Kotlin

什么是函数式编程?网上答案五花八门,有从历史开始阐述,有从Lambda演算开始,有从函数式编程和面向过程和面向对象的比较出发,有从函数式编程的特点闭包,高阶函数,柯里化(currying)开始,有从特定语言出发(JS,python,kotlin)开始讲。有的很吓人,有的很啰嗦,有的过于简单,有些不适合入门。我提取了前人的一些精华和自己的一些感悟斗胆尝试解释一下,希望对入门的同学有所帮助,就欣慰不已。

2018-10-17 19:08:25 819

原创 《CODE COMPLETE 2(代码大全2)》警句

阅读《代码大全2》,记录了一些经典标语,直抵内心,颇有感触。望与大家共勉,有些路走过了,才知道路不好走,但希望后来者能够避免,不重蹈覆辙。这些努力就是没有白费,希望您能够打印一份,放在案头,百无聊赖之时或遇到困难,望能一读,给您一些小的启发,想必也没有浪费您的时间一读。1 调试代码的难度是首次编写这些代码的两倍。2 消除软件缺陷实际上是最昂贵且最耗时的一种软件工作。3 测试永远不可能彻底证明...

2018-09-26 17:58:23 1057

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除