关注我,你的眼睛会辣
来源|网络
编辑|猿姐
学习编程基本就是在学习建造东西。如果你知道你到底想造什么,你的编程学习之路将会豁然开朗。如果你的目标只是“学习如何编程”,却不知道自己到底想写出什么样的程序,也不知道这些程序将如何让你的生活变得更美好,你很有可能会感到编程学习令你沮丧,受挫。
说起来还有点丢脸,猿姐最早想学习编程,是因为猿姐想证明自己聪明。并且,猿姐也想做一份属于聪明人的工作。猿姐还喜欢思考数学及理论。因此,编程怎么看都和自己很搭。
但直到遇到了编程语言里的各式各样杂七杂八的事才知道跳出去有多难。
下面猿姐就给大家简单分享自己遇到过的各种坑,也是各位同学需要注意的
JAVA篇
▼
1. Runnable In Scheduled Executors Service
当使用ScheduledExecutorService, Runnable内没有捕获的RuntimeException将会使Executor停止运行,并且异常不会被输出。
可以试着执行这段代码,定时任务将在你不知不觉中停止。
因此,在使用ScheduledExecutorService时,若需要处理不确定值的输入(例如解析数字字符串、解析时间、拆分字符串等),强烈建议用try-catch捕获异常。
不同于在普通的方法体里,在这里建议使用Exception来而不是特定的Exception。
2.Map 下的 NPE
Map 应该是我们开发中使用最频繁的了,最常用的可能有 HashMap 、 ConcurrentHashMap 这俩了,可能会一不留神写出这样的代码:
可能我们知道 ConcurrentHashMap 的 K/V 都不能为空,但我们有时候并不知道传进来的值是否为空。
那么如何解决呢?
设置时做下检验,对它的特性正确理解及使用。
由于 HashMap 的干扰,很多人认为:
ConcurrentHashMap 是可以置入 null 值,而事实上,存储 null 值时会抛出 NPE 异常Map 类集合 K/V 能不能存储 null 值的情况,如下表格:
3. 在大多数JVM实现里,Object.hashCode和内存地址无关
hashCode必须是保持不变的。不然的话HashSet或者ConcurrentHashMap就没法玩了。然而对象可以在内存的任何地方,并且它的位置还可能不断变化,而这个对你的程序来说是透明的。使用内存地址来当做hashCode是不可行的(除非你自己有一个JVM,对象是固定不动的)。 对于 OpenJDK和Hotspot JVM来说,hashCode是按需生成的,并存储在对象的头部。使用Unsafe API你看到hashCode是否已经生成了,甚至还可以修改它。
C语言篇
▼
1.避免内存泄露
程序在运行的时候需要内存,同时我们也知道内存是有限的,是计算机特别宝贵的资源,对于使用完的内存,应当及时的归还给操作系统。
在c/c++中,如果是栈上的内存(比如说函数中的局部非静态变量),在使用完之后,操作系统会帮我们自动回收;但是如果是通过动态分配得到的堆上的内存,需要我们手动释放。
如果我们在程序中忘了释放这些动态内存,而程序又是会持续运行的服务进程,会导致内存占用越来越高,轻者致残影响系统性能,重者致命导致进程崩溃。
总之一句话,不再用到的内存没有释放,就叫做内存泄露,内存泄露的问题很严重。好了,让我们看几个内存泄露的案例。
在C/C++中,通过动态内存分配函数或者new运算符分配的动态内存在使用完之后需要手动释放。否则会造成内存泄露。
建议大家代码编写时注意malloc/free, new/delete成对使用。
2 不要使用野指针
野指针也叫悬挂指针,是指向“垃圾”内存的指针,使用“野指针”会让程序出现不确定的行为。
注意,野指针不是NULL指针, 它比NULL指针更容易犯错,因为它不能通过形如 if (NULL == p)的判断语句来预防,只能我们自己在写代码时多注意。
指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针,事实上free或delete只是把指针所指的内存给释放掉,但是指针的值还是这块内存的地址,只不过这块内存已经被回收了不能被该进程再使用,下面的例子就是一个典型的使用野指针的案例。
给大家的解决方法是free或delete之后将相应的指针设置为NULL。
SQL篇
▼
1、不使用临时表
采用临时表暂存中间结果,避免程序中多次扫描主表,可以大大减少了阻塞,提高了并发性能。
2、不慎用like的“%”
关键词%rumo%,由于rumo前面用到了“%”,所以该查询采用全表扫描,在一般情况下不要再关键词前加%,除外硬性要求全表扫描。
3、使用!=或操作符
在where语句中使用!=或,引擎将放弃索引而采用全表扫描
4、使用in和notin
在where子句中使用in和notin,引擎将放弃索引而采用全表扫描
广告
牛B程序猿
孤独地写程序时,你需要一些陪伴,一些快乐,一些”干“货。
扫码关注!