黑马程序员技术交流社区

标题: 【西安校区】Java开发常用技术 [打印本页]

作者: 就业高冷派    时间: 2019-3-21 18:30
标题: 【西安校区】Java开发常用技术
基础部分

线程三个基本状态:就绪、执行、阻塞

线程五个基本操作:创建、就绪、运行、阻塞、终止

进程四种形式:主从式、会话式、消息或邮箱机制、共享存储区方式

进程是具有一定功能的程序关于某次数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。一个进程包含多个线程。

线程是进程的一个实体,是CPU调度和分配的基本单元。

四大域对象:PageContext、request、session、servletContext

九大内置对象:request、response、application、config、Exception、page、out、pageContext、session

Final关键词修饰一个变量是指引用变量不能变。引用变量所指对象的内容是可以变化的。

private:
继承成员但没有访问权限。(可以通过此类中的protected成员函数和public成员函数访问。)
protected:        
继承成员,有访问权限,类外没有访问权限,不可将继承的protected修改为private.
public:
继承成员,有访问权限,类外有访问权限。

静态代码块在JVM加载类的时候先执行,父类先于子类执行。

Before        在每个测试方法之前都会运行一次,只需要声明public

BeforeClass        在类中只运行一次,必须声明成public static

String-字符串 Hash-字典 list-列表 set-集合 sorted set-有序集合

HashMap基于Map接口实现,线程非同步所以不安全。键是唯一不可重复的,但是value值可以重复且允许空值存在。

HashTable是基于Dictionary类实现,线程默认同步所以是安全的,键值唯一且不为空,value值不能为空值。

HashSet是基于set实现的,以对象作为元素,且拒绝重复对象。内部使用HashMap实现,其实就是HashMap的一个视图。

ArrayList是基于动态数组的数据结构,查询较快

LinkedList是基于链表的数据结构,因为不需要移动数据,所以增删较快。

Wait方法属于Object类,使线程放弃进入执行,进入线程等待池,只能使用notify或notifyAll方法才能唤醒此线程,线程会等待进入线程池。即使在执行此方法时,线程已进入线程池,依然会放弃执行,让出线程池,交出锁。即使线程被激活,也需要等待前方线程执行完毕后才可进入线程池执行。

Sleep方法属于Thread类,使线程在指定时间内暂停执行,让cup暂时执行其他线程,但这个线程的监控状态依然保持,当执行时间到了以后,该线程恢复到之前状态,继续执行,线程不会释放锁。

==是一个运算符,是逻辑上的判断,比较的是引用地址。

Equals是String的一个方法,是比较引用地址,在Object类时,Equals和==是一样的,对于其他类来说如果重新了Equals方法,则比较的两个对象的数据内容。

HashCode和Equals都是在Object类中定义的,是对两个对象地址的比较,如果重写了Equals方法就必须重写HashCode方法。

HashCode方法返回的是对象的散列码,返回值是int类型的散列码;Equals返回的是true和false。

如果两个对象相同,他们的HashCode值必须相同;如果两个对象的HashCode值相同,他们不一样相同。

方法重载:在同一个类中,方法名称相同,参数类型和个数不同,返回值也可以不同。

方法重写:父子类、接口和实现类之间的关系,子类可以重写父类方法,但是参数个数、类型、返回值必须相同。

Before是初始化方法,在每个程序运行之前都会执行一次。

Beforeclass在类中只运行一次。

Situation: 事情是在什么情况下发生

Task: 你是如何明确你的任务的

Action: 针对这样的情况分析,你采用了什么行动方式

Result: 结果怎样,在这样的情况下你学习到了什么

cookie数据存储在客户的浏览器上,cookie是不安全的,别人可以分析存放在本地cookie并进行cookie欺骗;

Session存储在服务器上,Session是安全的;当访问增多时,Session会占用服务器性能,可以考虑使用cookie

ID选择器、类选择器、层次选择器、组合选择器、属性选择器、表单选择器等等

特性:原子性、一致性、隔离性、持久性。

隔离级别: ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。 ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。 ③ Read committed (读已提交):可避免脏读的发生。 ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。

可分批处理 先行保存部分内容至数据库,再清空list集合,重新导入内容

在一个字符集中,任何一个字符的编码都不是另一个字符编码的前缀。

GC.run

消除线性队列的“假溢出”,充分利用存储空间。

WebService是一个平台独立的、低耦合的,自包含的、基于可编程的web应用程序,可使用开放的xml标准来描述、发现、发布、协调和配置这些应用程序,是用户开发互操作的分布式系统。最基本的目的就是提供在各个不同平台的不同应用系统的系统工作能力。

1:Tomcat的Session复制。在一台Tomcat的Session发生变化时,将变更的数据分发给其它的Tomcat服务器。

2: 采用 memcached session manager 共享session。

redis的事务

Redis的事务是一组命令的集合,Redis事务的实现需要用到 MULTI 和 EXEC 两个命令,事务开始的时候先向Redis服务器发送 MULTI 命令,然后依次发送需要在本次事务中处理的命令,最后再发送 EXEC 命令表示事务命令结束。

redis丢失问题常见原因:

. 程序bug或人为误操作· 因客户端缓冲区内存使用过大,导致大量键被LRU淘汰· 主库故障后自动重启,可能导致数据丢失· 网络分区的问题,可能导致短时间的写入数据丢失· 主从复制数据不一致,发生故障切换后,出现数据丢失· 大量过期键,同时被淘汰清理

作用:acitveMQ就是消息队列,activemq安装之后,会有一个broker(经纪人)。

消息的生产者将消息发送到broker中,它不关心谁消费该消息。

消息的消费者去broker中获取信息,它不关心谁提供消息

fastDFS有两个角色:跟踪器(tracker)和存储节点(storage);

跟踪器负责记录图片地址,和响应java接口访问。java接口要想储存图片地址需向跟踪器发送请求,然后由跟踪器查找图片仓库地址发给java接口,同时记录储存过程,

Java接口配IP是配2个的,因为有2个跟踪器,而java接口连接IP时并不是智能的,如果连接第一个跟踪器没反应(第一个没反应不是忙就是挂了),它就会连接第二个跟踪器,不管连哪个跟踪器,最终都会返回一个地址给java接口。而两个跟踪器之间是有通信的,它们会把信息同步的,这个信息也就是meta信息,也就是管理的帐本。

跟踪器和存储节点有通信间隔时间,这个时间由我们决定。而存储节点之间也是有通信的,如果有一天存储节点和存储节点的仓库都满了,就扩张仓库,创建下一组存储节点和存储仓库。

框架部分

相同点:

1:Spring依赖注入来管理各层组件

2:使用面向切面的AOP编程思想管理事务、日志、权限等。

不同点:

Struts2和SpringMVC控制器控制视图和交互机制不同。

相同点:

Hibernate和Mybatis都是通过SessionFactoryBuider由xml文件生成SessionFactory,然后生成Session,由Session开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。都支持JDBC和JTA事务处理。

不同点:

Mybatis:Mybatis可以进行更为细致的SQL优化,可以减少查询字段。

Mybatis相对于Hibernate更容易掌握,门栏较低。

Hibernate:Hibernate的DAO层开发比Mybatis更简单,因为Mybatis需要维        护SQL和映射结果。

Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

Configuration,sessionfactory,Session,query接口,transaction接口

缺点:

        jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器

原因:借助于Spring AOP,Spring IOC能够很方便的使用到非常健壮、灵活的企业级服务,通过使用IoC能够降低组件之间的耦合度,最终,能够提高类的重用性,利于测试,而且更利于整个产品或系统集成和配置

Springmvc是spring一部分

IOC:控制反转,生产对象用。控制权由应用代码中转到了外部容器,控制权的转移,是所谓的反转。

AOP:面向切面编程,底层使用动态代理,作用:管理事务和安全监控,事务        只需要配置一次就不用再配置。

临时状态(transient):刚用new语句创建,还没有被持久化,不处于Session的缓存中。处于临时状态的Java对象称为临时对象。

持久化状态(persistent):已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象称为持久化对象。

游离状态(detached):已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象称为游离对象。

Java对象:开始生命周期——》临时状态——》持久化状态——》游离状态——》结束生命周期

1、实例化阶段 调用init()方法

2、服务阶段  调用service()方法

3、销毁阶段  调用destroy()方法

        首先客户发送一个请求,Servlet是调用service()方法对请求进行响应,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法的,HttpServlet中定义了方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doPost,doGet等这些方法。

JVM执行程序的过程 :

I.加载.class文件

II.管理并分配内存

III.执行垃圾收集

原理:

        1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求         2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)         3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action         4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy         5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类         6 ActionProxy创建一个ActionInvocation的实例。         7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。         8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 数据库部分

alter table ~ add ~ 添加列

优点:通过创建唯一性索引,可以保证数据库中每一行数据的唯一性,2,可以大大加快数据的检索速度,这也是创建索引的最主要的原因,3.可以加速表与表之间的连接,特别是在实现数据的参考完整性。

缺点:创建索引和维护索引需要消耗时间,这种时间随着数据的增加而增加,2.索引占用物理空间,需要的空间变大,3.当对数据库中的数据进行增删改的时候,索引也需要动态的维护,此时降低了维护速度。

Alter table user add index_name(name),括号内为字段名称

Alert table user add primary key(id)

Alert table user add unique (creattime)

Alert table user add fulltext(name)







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2