发表于: 2017-11-29 23:40:36

1 552


虽然请假,但是今天由于政府部门办事的人下乡,什么事情也没办成,继续学习.

一.今天完成的主要事情

1.学习了看专业技术书籍的方法,总结整理如下

想通过看书学习时的问题:

(1).专业书籍太多,不知道如何选择适合自己的书籍来看

(2).专业书籍一般又厚,又无趣,要看完需要花大量的时间,但是如果是上班族,没有大段大段的时间学习,怎么办?

首先,要明白自己工作使用到的是那一层的知识

计算机技术层次性非常明显,我们可以对照计算机技术的层次,找到我们主要工作和学习的层次,这一层称为N层.

其次,要明白当我们工作在N层时,主要对第N-1层和N+1层的知识下功夫,通常就足以应付日常的工作和学习了,之后随着工作深入,可以选择继续向下或者向上深挖.

那对于java后端来说,webServer就是我们工作的层次,本层需要了解的知识有各种框架的使用,基本原理,java基础知识,向下一层是java虚拟机,计算机的操作系统,向上一层是前端的相关内容,所以我们主要对这些方面的知识进行学习.

最后,要知道离我们当前层次越远的知识,我们越不用去研究的那么深入

这就帮助我们缩小了学习的范围,明确学习目的


对于第一个问题,有以下几点可以参考

一是选择适合于自己当前水平的书读.同一领域的书也分不同层次,有的适合入门,有的要求已经有一定的基础和经验,所以要选择自己刚好下点功夫能够看懂的书,太简单的浪费时间,太难的看不懂,打击积极性

二是选择自己已经具备读懂前提的书籍阅读.这点在看书时要注意先详细的看前言和序,技术类书籍在前言和序中一般会有受众的介绍,通过阅读前言可以筛选出适合自己阅读的书籍

     三是一般的规律是先阅读科普书籍入门,然后再通过学习专业教材掌握基础,最后通过技术书籍深入特定领域.学习都有一个先具体,然后再抽象的过程,比如学习java中的各种面向对象的概念,都是先举一个现实中的例子,然后再提取共性,进行更上层的抽象.所以在刚开始接触一个领域时,先阅读科普书籍的好处一是有助于理解这个领域内的一些基本术语和概念,科普书籍通常使用类比法,还可能穿插大量的图片辅助读者理解该领域内的基本概念;二是科普类书籍有助于搭建一个基本框架,后续学习时只要不断拓展这个框架和丰满框架即可,提高效率;三是可以激发对该领域的兴趣,增强学习动力

      阅读科普书籍入门之后,可以通过学习国内外大学课程中的专业教材,掌握基础,然后再通过阅读技术书籍深入特定领域.当然这个过程中少不了动手实践,不动手实践只看书是没有任何意义的.

       四是阅读前先明确自己的目的,以目标为导向,效率更高


对于第二个问题,在网上找到一个多遍阅读法,感觉非常好,这里也分享一下:

多遍阅读法具体步骤

      预热阶段:目的是初步构建知识之网,同时确定具体的阅读顺序和学习路线.该阶段的信息来源主要是序,前言,目录.

      通过阅读序和前言知道整本书的受众是谁,作者从什么角度诠释的,全书包括哪些内容.通过阅读目录初步构建出知识结构,因为技术书籍各个章节之间的顺序一般都有严密的组织,通过目录可以找到知识点之间的结构和联系.而且可以通过阅读同类型的不同书籍的目录找到该领域共用的知识结构,和重要的知识节点,比如如果一个知识点在不同书籍中都标注为重点,那么该知识就是这个领域的重点知识.

     第一遍阅读:目的是对整数有一个直观的概念,明确书中的重点和难点,以及可以跳过的内容

     方法是细读第一章,略读其他章节,其他章节只读开头和结论.

     细读第一章的原因是因为第一章通常会介绍一些全书都会用到的概念,术语,这些概念和术语通常也是该领域内常用的术语,理解这些术语有助于阅读其他章节.略读其他章节的开头和结论可以大概了解各个知识点的介绍,应用场景,作用等信息,有助于我们判断是否为重点,难点,是不是可以跳过.

      第二遍阅读:细读其中的重点章节,理解掌握

      这一遍关注的重点应当是自己最感兴趣的,感觉有些模糊的,自己还不知道的,过去理解错误的内容.对于看不懂的,可以先跳过,放在第三遍阅读,需要注意的一是如果是散落在各章的知识点,需要我们自己抽取出来形成结构,二是作者列出来的重点内容只能作为参考,真正的重点要读者自己决定,以读者为主

       第三遍阅读就是读第二遍还没有读过的内容

       第四遍阅读是读之前没有读懂的内容,此时要通读全书,回顾反思,巩固知识,形成体系.

       以上方式适用于一些特别经典的书籍,一般的书籍,前两遍读完就够了.


2.实践该方法,买了一本<算法图解>电子书实践

首先是选择这本书的原因,一是我在算法领域处于尚未入门的状态,所以要先入门,培养对该领域的兴趣,所以我选择了一本科普类读物来阅读.二是因为算法,数据结构,计算机组成原理,计算机网络这些领域处于我们工作的下一层,了解一些这方面的知识,更有助于我们学习和理解本层中的知识.

其次是实践,

第一是预热阶段.通过阅读前言,序,目录,明白该书的定位是初步入门想了解算法的人群,描述概念时使用了大量的类比法和图解,

内容选择上是挑选了一些比较常用的介绍,并不全面,可以用于了解一些常用的算法概念以及培养兴趣.

通过阅读目录,了解第1章介绍几个算法基本概念,第2-10章介绍了一些常用的数据结构和算法,中间还穿插了一些其他的算法概念,第11章介绍了其他的常用的重要的算法,为后续学习提供方向.

第二是第一遍阅读:

细读第一章,我了解了衡量算法性能的一个方式,大O表示法,它是指算法的速度,这个速度不是以时间来描述的,而是表示在最糟糕的情况下,不同算法解决问题时所用的运算次数增长的速度.比如一个有序数组,有100个元素,在最糟糕的情况下,找出其中一个元素,使用顺序查找,要找100次,使用二分查找法,只需要7次,而当这个数组中的元素增长到100000次时,顺序查找要100000次,而二分查找法只需要20次即可,所以顺序查找的算法速度为O(n),而二分查找法就是O(logn),这是衡量算法优劣的一个重要指标.其他的还有O(1,O(n*log(n)),O(n*n),O(n!)等

通过读其他的章节,我发现第1,2,3,4,5,11章为重点,因为涉及的内容平时常用,其余章节可以略读,先做了解

第三是第二遍阅读:

细读了第2,3章,掌握了数组,联表的基本概念,二分查找法,选择排序法的概念,算法速度以及实现,还有递归的基本概念和基本实现

这里就不一一贴出来了,只贴一个选择排序的实现


首先是一个功能类,类中有两个方法,一个是交换一个数组中任意两个位置中元素的值,还有一个是找出从index开始的剩余数组中最小的元素所在的索引.

public class SortUtils {

    //交换数组中两个元素的值

    public static boolean swap(int[] array, int index1, int index2){

        if (index1 >= array.length || index1 < 0){

            return false;

        }

        if (index2 >= array.length || index2 < 0){

            return false;

        }

        int temp = array[index1];

        array[index1] = array[index2];

        array[index2] = temp;

        return true;

    }

    //找出一个数组中从index元素开始的最小的元素,返回其索引

    public static int findSmallestElementFromIndex(int[] array, int index){

        if (index >= array.length || index < 0){

            return -1;

        }

        int min = array[index];

        int minIndex = index;

        for (int i=index; i<array.length; i++){

            if (array[i] < min){

                minIndex = i;

                min = array[i];

            }

        }

        return minIndex;

    }

}


然后是选择排序

选择排序的实现原理比较简单,其实就是依次遍历该数组,先找出最小的那个值,然后和整个数组中的第一个元素交换,然后再遍历从第二个元素开始的整个数组,找出最小值,再和第二个元素交换,依次类推...

该算法的性能为O(n*n),性能不是很好,但是实现比较简单

二.明天计划完成的事情

1.继续办事,如果还是遇到人员下乡没回来,继续阅读<算法图解>

三,遇到的问题

有一个问题,我再写功能类时,要不要判定参数呢?比如要求传入的索引不能小于0,而且不能大于数组长度,这个需要在功能类中判断然后处理呢还是调用这个功能类的人自己把握参数的正确与否...

四.收获

以上

五,项目进度情况

请假中,暂无项目


返回列表 返回列表
评论

    分享到