引言
在学C++或者Java的时候应该都会先了解各种基本数据类型的初值和它们的取值范围,有些人可能会不太重视这块内容,其实很重要,很多大公司面试的过程中都会问到int的取值范围,溢出之后会怎么样等问题。
插入排序简单的来说就是把一个数插入到一个有序的数列当中,从而使得新的数列仍然有序。再具体点讲,如果有一个数组,数组中有n个元素,如果用两个数组进行实现,其中一个是要排序的乱的数组,一个是空的数组,那么首先把第一个元素插入到空数组中,再取第二个元素插入,那么这个时候就需要判断是否比原先插入的元素大还是小,如果大则直接插入到原先元素后面,如果小则插入到原先元素的前面,然后取第三个元素,对原先插入的前两个元素进行比较后再插入到合适的位置,依此循环类推;如果用一个数组进行实现,那么可以把这个数组看成两个部分,一个是有序的部分,一个是无序的部分,然后只需要依次取无序的部分插入到有序的部分即可,其实思路和两个数组实现一样,两个数组实现比较好理解,然后首先可以把这个有n个元素的数组的第一个元素看成一个有序的部分,后面的n-1个数看成无序部分,接着取无序部分的第一个数,也就是整个数组的第二个数对前面有序部分的数进行依次比较,然后插入到相应的位置,依次类推,直到无序部分全部取完就结束了。
在做一个Socket通信的项目的时候使用了BufferedReader,并用readLine函数读取信息,但是遇到了一个问题,在服务端中,把readLine放到了读取消息的循环外面,然后Android客户端发送到服务端第一次消息被接收后,第二次发送到服务端的消息就再也无法在服务端中显示了,服务端程序就没有任何响应了,无论怎么发都没用,除非第二台设备接入服务端,那么服务端能接收到刚刚连接的那台设备的第一条消息,然后第二条还是一样收不到了。第二台Android设备还是能连接是因为服务端是会给每个接入设备开一个线程出来,一个设备对应一个线程,然后客户端也碰到了类似的问题,客户端是消息转发的handler出现了问题。这个问题是在三年前遇到的,当时随便解决了下就过去了,没有去仔细思考问题所在。