有一部分还不够完整,先将就着看吧…
主要字符串,面向对象,集合,多线程,设计模式,算法
String
String 在内存中是独一份的。
String a = "a"; String b = new String("a");
System.out.println((a == b)); //false
//两个字符串相加,生成第第三个字符串,内存中存在三个字符串对象
String a = "hello2"; String b = "hello" + 2;
System.out.println((a == b)); //false
//final 相当于直接把值附给b,c相当于“hello”+2 ,故为true
String a = "hello2"; final String b = "hello"; String c = b + 2; System.out.println((a == c)); //true
StringBuffer 与 StringBuilder
类图
Collection
List
ArrayList
LinkedList
Vector
Set
HashSet
LinkedHashSet
Queue 保持一个队列先进先出
Map
HashMap
Properties
比较 List 与 Set
比较 ArrayList与LinkedList与Vector
都是List的实现类,保存有序的可以重复的数据 底层用数组
ArrayList: 是List的主要实现类,线程不安全,效率高 使用Collections.synchronizedList(Xxx ) 底层用数组
初始长度 10,扩容 :1.5倍
Vector: 是List的古老实现类,线程安全,效率低,
LinkedList: 底层双向链表,
简述 HashSet 与LinkedHashSet
HashSet底层是HashMap,值存的常量 new Object()
简述 HashMap
HashMap的底层实现原理:
底层是Entry类型的数组 ,容量16,加载因子 0.75,键不能重复,先比较Hash值 ,如果Hash值一样,则比较equals()
比较 HashMap与Hashtable的区别
HashMap:作为Map的主要实现类 线程不安全的,可以存储null的key和value
Hashtable:作为Map的古老实现类 线程安全的,不可以存储null的key和value
单例模式
public class Singleton { //饿汉式
private Singleton() {
System.out.println("Singleton is create"); // 创建单例的过程可能会比较慢
}
private static Singleton instance = new Singleton();
private static Singleton getInstance() {
return instance;
}
}
1 public class Singleton { //懒汉式
2 private Singleton() {
3 System.out.println("LazySingleton is create"); // 创建单例的过程可能会比较慢
4 }
5
6 private static Singleton instance = null;
7
8 public static synchronized Singleton getInstance() {
9 if (instance == null)
10 instance = new Singleton();
11 return instance;
12 }
13
14 }
1 public class Singleton { //懒汉式的改良版本实现 延迟加载,非同步
2 private Singleton() {
3 System.out.println("LazySingleton is create"); // 创建单例的过程可能会比较慢
4 }
5
6 public static class SingletonHolder {
7 private static Singleton instance = new Singleton();
8 }
9
10 public static synchronized Singleton getInstance() {
11 return SingletonHolder.instance;
12 }
13
14 }
在这个实现中,用内部类来保护单例,当Singleton类被加载时,内部类不会被初始化,所以可以确保Singleton类被载入JVM时,不会初始化单例类,当getInstance方法被调用时,才会加载SingleHolder,从而初始化instance,同时,由于实例的建立是在类加载时完成的,故天生对多线程友好,getInstance()方法也不需要使用synchronized修饰,因此,这种实现能兼顾前两种写法的优点(延迟加载,非同步)。
工厂
抽象工厂
代理
动态代理
适配器
装饰
交换值:
public void sawp(int[] arr,int i,int j){
arr[i] = arr[i]+arr[j];
arr[j] = arr[i] - arr[j];
arr[i] = arr[i] - arr[j];
}
选择排序:
//选择排序:
public void selectSort(){
int arr[] = {8,11,33,4,55,66,76,43};
for(int i = 0;i<arr.length; i++){
for(int j=i+1; j<arr.length;j++){
if(arr[i] > arr[j]){
sawp(arr,i,j);
}
}
}
//打印
for(int i = 0;i<arr.length; i++){
System.out.print(arr[i]+" ");
}
}
冒泡排序:
//冒泡排序:
public void maoPaoSort(){
int arr[] = {98,11,33,4,55,66,76,43};
for(int i = 0;i<arr.length-1; i++){
for(int j=0; j<arr.length-1-i;j++){
if(arr[j] > arr[j+1]){
sawp(arr,j,j+1);
}
}
}
//打印
for(int h = 0;h<arr.length; h++){
System.out.print(arr[h]+" ");
}
}
快速排序:
public static void quickSort(int arr[],int _left,int _right){
int left = _left;
int right = _right;
int temp = 0;
if(left <= right){ //待排序的元素至少有两个的情况
temp = arr[left]; //待排序的第一个元素作为基准元素
while(left != right){ //从左右两边交替扫描,直到left = right
while(right > left && arr[right] >= temp)
right --; //从右往左扫描,找到第一个比基准元素小的元素
arr[left] = arr[right]; //找到这种元素arr[right]后与arr[left]交换
while(left < right && arr[left] <= temp)
left ++; //从左往右扫描,找到第一个比基准元素大的元素
arr[right] = arr[left]; //找到这种元素arr[left]后,与arr[right]交换
}
arr[right] = temp; //基准元素归位
quickSort(arr,_left,left-1); //对基准元素左边的元素进行递归排序
quickSort(arr, right+1,_right); //对基准元素右边的进行递归排序
}
}
public static void main(String[] args) {
int array[] = {10,5,3,1,7,2,8};
System.out.println("排序之前:");
for(int element : array){
System.out.print(element+" ");
}
quickSort(array,0,array.length-1);
System.out.println("\n排序之后:");
for(int element : array){
System.out.print(element+" ");
}
}
二分查找:
public void binarySearch(){
int arr[] = {1,11,33,44,45,46,47,76,100,200,201};
int serch = 201;
int low = 0;
int hight = arr.length-1;
int mid = (low + hight)/2 ;
while(low <= hight){
if(serch>arr[mid]){
low = mid+1;
mid = (low + hight)/2 ;
}else if(serch<arr[mid]){
hight = mid-1;
mid = (low + hight)/2 ;
}else{
System.out.print(mid);
break;
}
}
}
重载与重写
throw与throws
final finally finalize()
Conllections Conlletions
String StringBuffer StringBuider
抽象类 接口
sleep() wait():都可以让线程阻塞,Sleep是thread类中的方法,sleep是Objicet中的方法
==与equals()方法有什么区别:==是运算符 比较两个基本数据类型的值,和两个对象的地址值,equals()是object对象的方法,自定义得重写 equals()方法
spring,springmvc ,mybitis,springboot,springcloud,dobbo,zookeeper
具体来说Spring是一个轻量级的容器,用于管理业务相关对象的。核心功能主要为:IOC,AOP,MVC。
IOD:控制反转,将对象的创建过程交给容器,让容器管理对象的生命周期如创建,初始化,销毁等。
AOP:面向切面编程,对关注点进行模块化,通过对某一功能点进行编程,比如记录日志,有很多个类都需要记录日志的方法,则创建记录日志的代理方法,需要调用该功能是只需要调用代理方法,这就是AOP。
MVC:SpringMvc,Spring提供的基于MVC模式设计的Web框架,如今比较流行的框架之一。
传统一体化架构有什么缺点:
什么是微服务:
微服务,又叫微服务架构,是一种软件架构方式。它将应用构建成一系列按业务领域划分模块的、小的自治服务。在微服务架构中,每个服务都是自我包含的,并且实现了单一的业务功能。
微服务的特点:
解耦:同一系统内的服务大部分可以被解耦。因此应用,作为一个整体,可以轻易地被构建、修改和扩展。
组件化:微服务可以被看成相互独立的组件,这些组件可以被轻易地替换和升级。
业务能力:微服务很小,它们可以专注于某种单一的能力
自治:开发者和团队可以独立地工作,提高开发速度。
持续交付:允许持续发布软件新版本,通过系统化的自动手段来创建、测试和批准新版本。
职责明确:微服务不把应用看成一个又一个的项目。相反,它们把应用当成了自己需要负责的项目。
去中心化管理:关注于使用正确的工具来完成正确的工作。这也就是说,没有标准化的方式或者技术模式。开发者们有权选择最好的工具来解决问题。
敏捷性:微服务支持敏捷开发。任何新功能都可以被快速开发或丢弃。
mysql,redis,mongo
影响mysql的性能因素:
索引:
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
ALTER TABLE table_name ADD INDEX index_name (column_list) //建索引
ALTER TABLE table_name ADD UNIQUE (column_list) //唯一
ALTER TABLE table_name ADD PRIMARY KEY (column_list) //主键
查询优化:
EXPLAIN:使用其关键字可以模拟优器执行SQL查询语句,从而知道mysql如何处理你的sql语句
索引优化:
事务:ACID
操作文件及目录常用命令
命令 | 中文释义 |
---|---|
ls -l | 列出文件详细信息l(list) |
mkdir -p | 创建目录,若无父目录,则创建p(parent) |
cd | 切换目录 |
touch | 创建空文件 |
echo | 创建带有空内容的文件 |
cat | 查看文件内容 |
cp | 拷贝 |
mv | 移动或者重命名 |
rm -r | 递归删除,可删除子目录及文件 |
rm -rf | 强制删除 |
rm dir - | 删除文件夹 |
grep | 在文本中查询某个字符串 |
tree | 显示目录结构 |
操作vim常用命令
命令 | 中文释义 |
---|---|
:q! | 强制退出 |
:wq | 强制保存并退出 |
:set number | 显示行号 |
:set nonumber | 隐藏行号 |
/apache | 在文档中查找apache 按n跳到下一个,shift+n上一个 |
yyp | 复制光标所在行,并粘贴 |
查看性能/系统 常用命令
命令 | 中文释义 |
---|---|
ifconfig | 查看网络情况 |
netstat | 显示网络状态 |
kill | 杀进程 |
ps | 查看进程 |
ps -ef|grep tomcat | 查看与tomcat有关的进程 |
top | 动态显示当前耗费资源最多进程信息 |
项目部署常用命令
命令 | 中文释义 |
---|---|
tail -f catalina.out | cd usr/local/tomcat8/logs 下执行查看实时日志 |
./startup.sh | cd usr/local/tomcat8/bin 下执行启动tomcat |
./shutdown.sh | 关闭,关不掉,kill |
打包压缩
命令 | 中文释义 |
---|---|
tar -zxvf test.tar.gz | tar 解压 |
upzip test.zip | zip 解压 |
tar -zcf test.tar.gz /test1 /test2 | tar 压缩 |
zip -r test.zip /test | zip压缩 |
其它常用命令