1)arraylist底层数组结构,原理:数组复制
2)底层自动扩容数组,初始为10,每次扩容上次的1/2
4)利用index按顺序存储
1)底层链表结构(双链表)
总结:arraylist更适合读取数据,linkedlist更多的时候添加或删除数据。
arraylist内部是使用可増长数组实现的,所以是用get和set方法是花费常数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动。
linkedlist是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。
重写:不同类中,方法体结构相同,逻辑代码可以不同,方法被定义为final不能被重写。
重载:同一类中,方法体结构相同参数列表类型和个数不能相同。
&和&&都可以作逻辑与,&它的左边无论是true还是false,右边的条件都要进行判断,&&它的左边如果是false,右边则不用进行判断。
&可以用作位运算符,将左边和右边两个数转换成二进制数然后进行与运算。
1)不能被实例化(子类继承后可实例化子类)
3)有属性,方法,构造方法,抽象方法
4)抽象类中抽象方法必须被重写
5)子类有且只有一个父类
3)有属性,抽象方法(属性必须初始化,且不能更改)
4)子类可以实现多个接口
1:abstract 关键字修饰,并且没有方法体
2:抽象类不能直接创建实例
3:抽象类只能被继承,一个具体类继承一个抽象类,必须实现所有抽象方法
1:实现接口的一定要实现接口里定义的所有方法
2:接口可以实现多重继承
1:抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用
2:一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类
3:接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法
5:抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
6.接口可以继承接口,甚至可以继承多个接口;类可以实现多个接口,只能继承一个类。
加载驱动-创建连接-创建语句-执行语句-处理结果-关闭资源
hashmap线程不安全。hashmap是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。hashmap允许包含空键和空值,而hashtable不允许空键值。
hashtable线程安全。hashmap是hashtable的轻量级实现(非线程安全的实现),他们都完成了map接口,主要区别在于hashmap允许空键值,由于非线程安全,所以效率上可能高于hashtable。
- 一个进程因请求发生阻塞时,依然对已获得的资源保持不放
- 进程已经获得资源使用权,但是一直未使用
- 同一个进程,频繁的获取资源的优先使用权,一直未释放
加锁顺序(线程按照一定的顺序加锁)
加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该
锁的请求,并释放自己占有的锁)
死锁检测(一般是将所有的锁存放于map对象中,检测map中的锁)
tcp稳定性较高,但效率低。tcp三次握手协议。
udp通讯相反,效率较高,但稳定性较差
3:接口注入 注解实现注入(常用)
2.#方式能够很大程度防止sql注入,$方式无法防止sql注入
3.$方式一般用于传入数据库对象,例如传入表名
4.#{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
5.一般能用#的就别用$
cookie存在客户端、session数据放在服务器上
cookie不是很安全,别人可以分析存放在本地的cookie并进行修改
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器
单个cookie在客户端的限制是3k,就是说一个站点在客户端存放的cookie
3:hibernate支持事务、一级缓存、二级缓存、查询缓存等
4:hibernate自己提供分页功能,mybatis需要配置分页插件
f8:执行到下一个断点
两个字节,可以存储,前提是汉字必须是unicode编码
aop称为面向切面编程
用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存
等等实现aop功能关键是采用代理技术,主要分为静态代理(aspectj)和动态代
理,jdk中采用proxy类产生动态代理的方式为某个接口生成实现类,如果要
为某个类生成子类,则可以用cglib。
thread的start才是正在开启线程;run只是调用了一个普通方法,并没有启动另一个线程,程序还是会按照顺序执行相应的代码。start则表示,重新开启一个线程,不必等待其他线程运行完,只要得到cup就可以运行该线程。
静态变量前面要加static,实例变量不用。实例变量属于对象的属性,必须创建了实例对象,才可以被使用,静态变量不属于某个实例对象,而是属于类,也叫类变量,不用创建任何实例对象就会被使用。
通常在处理文本时优先使用字符流,其他的用字节流
字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符
流在操作时使用了缓冲区,通过缓冲区再操作文件
redis:数据量较小的更性能操作和运算上
mongodb:主要解决海量数据的访问效率问题
==:比较两个数据内存地址是否相同
equals:比较两个数据值是否一样
++i:先赋值,后运算
i++:先运算,后赋值
mvc:是一个框架设计模式,其中m(模型)、v(视图)、c(控制器)
视图:视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业
务逻辑处理。如:jsp、html等
模型:表示业务数据和业务处理。属于数据模型,如:entity、jdbc、
通过调用 init () 方法进行初始化;调用 service() 方法来处理客户端的请求;通过调用 destroy() 方法终止(结束)servlet 是由 jvm 的垃圾回收器进行垃圾回收的;
- 进程是资源的分配和调度的一个独立单元,而线程是cpu调度的基本单元
- 同一个进程中可以包括多个线程
- 进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束
- 线程共享整个进程的资源(寄存器、堆栈、上下文),一个进行至少包括一个线程
- 线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源
当进程已分配到除cpu以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为运行状态。
正在运行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待i/o完成、申请缓冲区不能满足、等待信件(信号)等。
就绪→运行:处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成运行状态。
运行→就绪:处于运行状态的进程在其运行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从运行状态转变成就绪状态。
运行→阻塞:正在运行的进程因等待某种事件发生而无法继续运行时,便从运行状态变成阻塞状态。
阻塞→就绪:处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。
jre只是java程序的运行环境,它最核心的内容就是jvm(java虚拟机)
组织协调spring mvc的各个组成部分
3:浏览器向服务器发送http请求
4:浏览器发送请求头信息
7:服务器发送应答头信息
为了解决面向对象与关系数据库存在的互不匹配的现象的技术,orm是通过使用描述对象和数据库之间映射的元数据(元数据一般采用xml格式),将程序中的对象自动持久化到关系数据库中,java典型的orm中间件有:hibernate,ibatis,speedframework,mybatis
(inversion of control,简称ioc),即控制反转,是一种设计模式,是spring的核心。可以解决代码耦合,由ioc容器来管理对象的生命周期、依赖关系等。
page:当前页面有效
request:一次会话请求有效
session:浏览器进程,只要浏览器不关闭,则一直有效
application:服务器只要运行,则有效
1:修饰类:表示该类不能被继承
2:修饰方法:表示方法不能被重写
3:修饰变量:表示变量只能一次赋值以后值不能被修改(常量)
1:error表示系统级的错误和程序不必处理的异常,有可能恢复,但是恢复比较困难的严重问题。
2:exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况
3:如果你不能处理异常,不要捕获该异常
4:如果要捕获,应在离异常源近的地方捕获它
1:开启所有服务器的二进制文件
2:开启所有从服务的io和sql线程
3:配置主从连接的用户信息和主从信息
4:开启3306端口号
nio:是一种new io,其目的是为了实现高速io的代码,将io操作并转换为操作系统,属于非阻塞型,java.nio.*,是以块(缓冲区)的形式就行数据的传输。
io:是以流的方式就行数据的传输,属于阻塞型,影响程序的性能
单例模式(singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。
单例模式只允许创建一个对象,因此节省内存,加快对象访问速度
c.以自己实例为返回值的公有静态方法
饿汉式:单例实例在类装载时就构建,急切初始化。(预先加载法)
懒汉式:单例实例在第一次被使用时构建,延迟初始化。
- 创建对象时耗时过多或者耗资源过多,但又经常用到的对象
- 网站计数器,一般是采用单例模式实现
- 由于配置文件一般都是共享资源,即web应用的配置对象的读取,一般采用单例模式来实现。如:spring的配置文件的读取等
- 多线程的线程池的设计一般也是采用单例模式
round方法,他表示“四舍五入”,算法为math.floor(x+0.5),即将原来的数字加上0.5后再向下取整
构造器不能被继承,因此不能重写override,但可以被重载overload
- lock能完成几乎所有synchronized的功能,并有一些后者不具备的功能,如锁投票、定时锁等候、可中断锁等候等
发布jar包、发布war包、部署到自动化容器中
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化(将对象转换成二进制)。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题
序列化:把java对象转换为字节序列的过程。
反序列化:把字节序列恢复为java对象的过程。
被关键字static、transient修饰的变量不能被序列化。在被序列化后,transient修饰的变量会被设为初始值。如int型的是0、对象型的是null.
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
继承与他的接口主要有set 和list.
collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率
gc是垃圾收集的意思(gabage collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,
java提供的gc功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,java语言没有提供释放已分配内存的显示操作方法
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉interruptedexception异常。 notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由jvm确定唤醒哪个线程,而且不是按优先级。
allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
java中的23种设计模式:
adapter(适配器模式), bridge(桥梁模式),
observer(观察者模式), state(状态模式),
工厂模式:工厂模式是一种经常被使用到的模式,
根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,
通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。
首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。
然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。
当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
list 以特定次序来持有元素,可有重复元素。
set 无法拥有重复元素,内部排序。
数据库表:字段类型、字段长度、注释、字段命名规范
数据库索引:外键、关联字段、查询频率比较高的字段、
数据库视图:相当于一张临时表,业务中,尽量少使用
数据库引擎:根据业务,选择对应的表引擎技术
数据库监听器/触发器:一般用于调度任务或者备份还原
2:业务调用的sql语句优化
尽量少关联表,效率最高关联4张表,如果多于4张表,则需要开启两个链接事务,但是这两个事务,必须在一个service当中。
如果是查询语句,where条件后面,最好使用索引字段进行关联
3:数据库服务器的搭建(集群)
1、 一级缓存是session独享,默认开启,无需配置
2、 二级缓存是session共享,需要在配置文件中开启,可以指定缓存区域块
a、java的数组可以随时改变大小
b、string字符串的长度和大小都是不可变的
d、java虚拟机是实现跨平台的基础
a、构造函数是类的特殊函数,他的方法名必须与类名相同
b、构造函数没有返回值类型
c、一个类可以有多个构造函数
d、构造函数在类加载时调用
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。