一个沙包的JAVA学习之旅(二)

本文记录了作者半个月来的JAVA学习心得,包括多态、String原理、HashMap与数组排序。同时深入探讨了SSM框架的Spring、SpringMVC、Mybatis,并分享了如何处理页面返回的JSON信息。此外,还介绍了Linux基础,如CentOS7的安装与常用命令。
摘要由CSDN通过智能技术生成

又过了半个月,这半个月在基础知识上倒是在反复的去记和练习,但是还是有一些很简单的东西不是很容易,例如在数据结构中的二叉树实现的原理,真的就是怎么看都不懂。。。觉得过一段日子应该去买一本数据结构的书来看看,因为在HashMap中(JDK1.8)当链表的长度超过8时会自动进行重构,就突然觉得这个二叉平衡树应该是个比较重要的知识点,以后会找个时间去好好的学习下数据结构。

这半个月学习到的新的知识:

JAVA基础:

1、有关于多态的问题:

java的特征之一多态,一直以来都是被当做成JAVA的核心特征来看待的,这里面包括的重写和重载也确实用途非常的广,而在重写中,会出现的问题就是方法的缺失,当向上转型的时候,子类的部分方法可能会导致遗失,具体的原理还需要我之后去研究。

2、String字符串的实现原理:

最近有个在学java的朋友问我:“为什么int啊boolean什么的在编译器里有高亮显示而String没有啊,不都是数据类型么?”,这句话让我突然想起来了一个知识点就是String并不是基本数据类型,除了那八大基本数据类型之外,其他的数据类型都是引用类型,但为什么String不是基本数据类型我也不知道,所以一时好奇就点开了下String的源码,其中有一段注解是这么描述的

 * <blockquote><pre>
 *     String str = "abc";
 * </pre></blockquote><p>
 * is equivalent to:
 * <blockquote><pre>
 *     char data[] = {'a', 'b', 'c'};
 *     String str = new String(data);
 * </pre></blockquote><p>

可想而知,所谓的字符串就是以一个char的数组方式存在的,会不会就是因为这个原因,所以它才不是基本数据类型呢?(如果有不对的地方欢迎指出来)。

3、HashMap的源码:

ArrayList的好处都知道,查询快,而LinkedList呢插入快,就因为想把这两个优点结合起来,新的一个链表类型出现了,就是HashMap,它将链表放到了一个ArrayList下面,这就基本完成了一个HashMap,它的默认长度是16,而当容量即将不足的时候,会根据扩容因子进行扩容,默认为0.75,算法为扩容因子=总长度/规定的最大使用长度,它是不安全的,允许key值为空,而还有一个叫HashTable它是安全的,并且不允许key为空。

4、数组的排序:

一般的java程序员都能写出一个简单的冒泡排序,而这种排序却十分效率低(但是好写),还有一种方法叫插入排序法,所用的原理也是每两个相邻元素进行比较,当出现转折点时,就将a[n+1]位和前面的元素进行反方向的冒泡排序,听起来好像还可以,不过效率还是比较低,比较快的排序方法叫做快速排序,它的原理是随便选择一个元素作为基准比较元素(key),定义两个游标i(0),j(a.length-1),如果是以小到大的排序就拿他们分别比较,i如果比key小,i++,j如果比key大,就j--,出现不符合的时候将两元素交换顺序,直到i和j挨着,这个时候把key放到合适的位置上,然后使用递归的方法执行上面的操作,就能完成一个快速排序的功能。

SSM框架篇

我从这个月的一开始就在研究ssm框架,到现在为止,一个能实现后台基本功能的项目已经基本完成了,可以参考我之前的博客

点击打开链接

在这里我会总结出我对SSM框架的认识。

1、Spring:

在我的认识中Spring应该算是个中央管理器,内置了一个可以容纳被管理的一些组件,通过一些配置可以达到IoC、AOP的一些功能,而这个控制反转可以说是很常用的功能之一了,它使得一个对象的创建控制权不再归调用者所有,而是归Spring所有,当有需求的时候Spring容器可以通过@Autowire进行对使用者的对象注入,这样可以极大的减少耦合性,另外还有一些需要使用单例模式初始化的组件例如连接池,也可以在Spring的Bean中进行配置。

2、SpringMVC

SpringMVC是对业务的控制、事务控制、页面控制的一个框架,它的运行流程为:用户发送请求,SpringMVC的前端控制器拦截到请求,然后开始寻找适配器,通过适配器寻找到相对应的控制器Controller,此时Controller会调用业务层Service的方法进行业务逻辑实现,Service会调用Dao层与数据库进行交互,当所有事务完成会将相应的页面发给视图解析器,从而完成一个具体业务的实现。

3、Mybatis

作为一个持久层的一个框架,对于我来说真的是非常的好用,首先它本身就提供了一个“逆向工程”,所谓的逆向工程就是根据数据库中的信息实现创建DAO层的一些接口类的创建,包括pojo、mapper接口、mapper映射等,这个时候在事务层中如果需要与数据库进行交互直接就可以调用对应的接口就能实现对应的业务逻辑,真的非常好用。

4、页面返回的JSON信息如何通过ajax进行转发

就我而言,以我现在的能力只能做到比较原始的方法,首先返回给ajax一个json字符串,之后将这个字符串发给一个页面,当这个Json数据是一个包含特殊符号(/、.、\等等)时,会发现当controller收到这个字符串事,这个字符串是一个包含16进制+%的这么一个字符串,这个时候就要对它进行转义,使用URLDecoder.decode方法进行转义,转义之后会得到一个带有双引号的转义成功的字符串,这个时候就可以用subString对字符串进行切割就能达到接受字符串目的。

Linux相关的基础

因为我的项目需要用到Nginx、redis、vsftpd、solr,所以就需要一个linux操作系统,我是使用的centos7系统,在vm虚拟机搭建的,有些东西是需要注意的:

1、linuxCentOS7的安装

在分配空间时,boot要分配不少于200mb的空间,以保证linux有足够的空间运行系统,在vm设置中也比较推荐使用net进行连接,使用其他的方式连接总是会发生一些奇奇怪怪的事情,连不上网或者主机连不到linux系统等等的小毛病。在安装时建议直接打开eth33,这样在安装后就基本能完成网络连接的功能,其次要提一点有些软件例如jdk需要配置环境变量,环境变量的文件在/etc/的prefile

2、常用的命令

yum install——安装本地库存在的程序,wget——下载网络资源,cd—— 跳转文件夹,find ./ type f ——查找文件,whereis——查找程序路径 vim打开编辑器 ps aux|grep 查看端口占用情况 ifconfig查看本机信息 还有很多就先不列举了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值