备战金九银十之刷题术

177 阅读6分钟

这是我参与更文挑战的第13天,活动详情查看: 更文挑战

刷题之金九银十跳个厂。

一、进程和线程

1、进程和线程的区别

​ 1.进程是资源分配的最小单位(操作系统教材里的说法);是正在运行的程序实例;是构成运行程序的资源的集合(C#图解教程里的说法);每个正在系统上运行的程序都是一个进程;

​ 2.线程是CPU调度的最小单位(同操作系统教材里的说法);是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行;也可以把它理解为代码运行的上下文。

​ 3.两者关系:默认情况下,一个进程中只包含一个线程(主线程)且至少有一个线程,但一个进程可以包含多个线程。线程基本上是轻量级的进程,进程是所有线程的集合,每一个线程是进程中的一条执行路径。

另外:

1.一个进程可以包含多个线程

2.同一进程下不同线程间数据很易共享,不同进程间数据很难共享

2.线程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块3内存,互斥的道理。

2、进程间的通信方式

管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

3、内存泄漏

内存泄露本意是申请的内存空间没有被正确释放,导致后续程序里这块内存被永远占用(不可达),而且指向这块内存空间的指针不再存在时,这块内存也就永远不可达了,内存空间就这么一点点被蚕食。

二、java基础

1、重写和重载

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

2、java创建多线程和多进程的方式

java中实现多线程的方式:

①继承Thread类(不推荐,因为Java不支持多继承,继承会让类间的耦合性变高):

②实现Runnable接口(这种方式比较推荐,面向接口编程):

Java提供了两种方法用来启动进程或其它程序:

(1)使用Runtime的exec()方法

(2)使用ProcessBuilder的start()方法

三、虚拟机

1、堆内存和栈内存

堆内存:存储的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。堆里的实体虽然不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的收取。

栈内存:栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。

两者区别:

1.栈内存存储的是局部变量而堆内存存储的是实体;

2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;

3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

四、数据库

1、内连接和外连接

内连接:也称为等值连接,返回两张表都满足条件的部分

注释:inner join 就等于 join

外连接分为左外、右外、全外

左外连接,就是无论on中的条件满不满足,都保留左表所有数据

右外连接,即无论on中的条件满不满足,都保留右表所有数据

全外连接,即无论on中的条件满不满足,都保留所有表所有数据(mysql不支持)