发表于: 2019-11-22 18:11:56

1 904


今天完成的事:总结一下例会

在师兄讲Map,List,Array,Set,因为刚好是他的小课堂内容,所以准备非常充分,一边讲一边发散,一边讨论,List特点:元素有放入顺序,元素可重复, Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。这里又发散了一下equals()和==区别,equals()是超类Object中的方法,==是操作符,equals():用来检测两个对象是否相等,即两个对象的内容是否相等。==用于比较引用和比较基本数据类型时具有不同的功能。Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。 List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。 

map分为好几种,师兄主要讲了HashMap和TreeMap,HashMap引用了一个特殊的值hash code,用来代表对象的int值,hashCode()是定义在基类Object中的方法,然后HashMap在jdk1.8版本前后又有不同,主要体现在节点数大于等于8,1.8以前数组加单向链表,1.8以后数组加红黑树,然后这里又产生了一个问题,红黑树又有什么特点,都一知半解,百度了一下这个东西要想完全搞明白还是挺复杂的。

然后就是线程安全和非线程安全,电脑中时会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的,比如qq,网易云音乐。进程想要执行任务就需要依赖线程。换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。那什么是多线程?提到多线程这里要说两个概念,就是串行和并行,串行在我的理解就是一件事同时只能一个人做,另一个人必须等前一个人做完才能去,例如当我们下载多个文件时,在串行中它是按照一定的顺序去进行下载的,也就是说,必须等下载完A之后才能开始下载B,它们在时间上是不可能发生重叠的。下载多个文件,开启多条线程,多个文件同时进行下载,这里是严格意义上的,在同一时刻发生的,并行在时间上是重叠的。多线程,举个例子,我们打开腾讯管家,腾讯管家本身就是一个程序,也就是说它就是一个进程,它里面有很多的功能,能查杀病毒、清理垃圾、电脑加速等等。按照单线程来说,无论你想要清理垃圾、还是要病毒查杀,那么你必须先做完其中的一件事,才能做下一件事,这里面是有一个执行顺序的。如果是多线程的话,我们其实在清理垃圾的时候,还可以进行查杀病毒、电脑加速等等其他的操作,这个是严格意义上的同一时刻发生的,没有执行上的先后顺序。当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步及在调用类时不必作其他的协调,这个类的行为仍然是正确的,那么称这个类是线程安全的。

LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;
HashMap是非线程安全的,HashTable是线程安全的;
StringBuilder是非线程安全的,StringBuffer是线程安全的。

这个我暂时就只能记一下结论,具体为什么感觉要结合源码才能更好的理解

ioc是是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。而di就是实现ioc的方法,由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。 在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题(你是什么时候生的,怎么生出来的我可不关心,能帮我干活就行),A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。

控制反转IoC(Inversion of Control)是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。

使用 try 和 catch 关键字可以捕获异常。

try/catch 代码块放在异常可能发生的地方。try/catch代码块中的代码称为保护代码。

一个 try 代码块可以后面跟随多个 catch 代码块,叫多重捕获。

如果一个方法没有捕获一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

java提供了抛出异常捕获异常的逻辑用于处理异常,当程序抛出异常时,如果不存在捕获异常逻辑,正在执行的方法将停止执行,并将该异常向外抛出,调用该方法的程序进行同样的处理,如果也没有进行捕获,则将一层一层的向外抛出,直到到达当前线程处时将会终止线程的执行。

遇到的问题:有些关于数据结构的东西,只是大概了解了叫啥名字和长啥样子

明天计划的事:继续任务

收获:深入了解问题的本质







































返回列表 返回列表
评论

    分享到