11 2020 档案
摘要:更新 最近发现服务器被挖矿病毒入侵了 很有可能是因为redis没有设置密码的原因! 1.获取redis镜像 docker pull redis 指定版本号: docker pull redis:4.0.9 不加版本号默认获取最新版本,也可以使用 docker search redis 查看镜像来源
阅读全文
摘要:1.拉取镜像 docker pull mysql:5.7.25 出现如下图,代表拉取成功: 也可以通过:docker images 命令查看是否已经在列表中展示了。 docker images 2.创建容器 2.1创建本地文件夹,映射容器中的mysql文件 mkdir -p /data/mysql/
阅读全文
摘要:反射是指程序在运行状态中, 1,可以对任意一个类,都能够获取到这个类的所有属性和方法。 2,对于任意一个对象,都可以调用它的任意一个方法和属性 反射是一种能力 一种在程序运行时,动态获取当前类对象的所有属性和方法的能力,可以动态执行方法,给属性赋值等操作的能力 Class代表的就是所有的字节码对象的
阅读全文
摘要:1,什么是死锁 死锁最初由一个悲惨的故事说起,话说一群哲学家一起聚餐,然后在每个人的左边和右边分别放着一根筷子,而只有同时抓到两根筷子,才能正常吃饭,于是,不幸的故事发生了,每位哲学家都只抓到一根筷子,且都不愿意释放手中的筷子,于是,最终一桌的饭菜就这么浪费了。 不知道这个故事是谁发明的,但确实形象
阅读全文
摘要:首先,两者都是传输层的协议。 其次, tcp提供可靠的传输协议,传输前需要建立连接,面向字节流,传输慢 udp无法保证传输的可靠性,无需创建连接,以报文的方式传输,效率高
阅读全文
摘要:XSS攻击,俗称跨站点脚本攻击, 其原理是往网页添加恶意的执行脚本,比如js脚本。 当用户浏览该网页时,嵌入其中的脚本就会被执行,从而达到攻击用户的目的。 比如盗取客户的cookie,重定向到其他有毒的网站等等。 比如写一段js脚本(这还是很有善意的脚本) for(var i=1;i<100;i++
阅读全文
摘要:深拷贝:除了对象本身被复制外,对象所包含的所有成员变量都会被复制,包括引用类型的成员对象 浅拷贝:只复制对象其中包含的值类型的成员变量,而引用类型的成员对象没有被复制
阅读全文
摘要:1,作用的位置不同 synchronized可以给方法,代码块加锁 lock只能给代码块加锁 2,锁的获取锁和释放机制不同 synchronized无需手动获取锁和释放锁,发生异常会自动解锁,不会出现死锁。 lock需要自己加锁和释放锁,如lock()和unlock(),如果忘记使用unlock()
阅读全文
摘要:1,作用的位置不同 synchronized是修饰方法,代码块 volatile是修饰变量 2,作用不同 synchronized,可以保证变量修改的可见性及原子性,可能会造成线程的阻塞 volatile仅能实现变量修改的可见性,但无法保证原子性,不会造成线程的阻塞
阅读全文
摘要:有以下4个级别: l READ UNCOMMITTED 读未提交,脏读、不可重复读、幻读有可能发生。l READ COMMITTED 读已提交,可避免脏读的发生,但不可重复读、幻读有可能发生。l REPEATABLE READ 可重复读,可避免脏读、不可重复读的发生,但幻读有可能发生。l SERIA
阅读全文
摘要:原子性是基础,隔离性是手段,一致性 是约束条件,而持久性是我们的目的。 简称,ACID 原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持久性( Durability ) 原子性: 事务是数据库的逻辑工作单位,事务中包含的各操作要么都完成,要
阅读全文
摘要:JDBC对事务的操作是基于Connection来进行控制的,具体代码如下: try { //开启事务 connection.setAutoCommit(false); //做业务操作 //doSomething(); //提交事务 connection.commit(); }catch(Except
阅读全文
摘要:1,SQL注入,是指通过字符串拼接的方式构成了一种特殊的查询语句 比如:select * from t_user where usename='' and password=''' or 1=1 #select * from t_user where usename='' or 1=1 # ' an
阅读全文
摘要:左连接:以左表为主 select a.*,b.* from a left join b on a.b_id = b.id; 右连接:以右表为主 select a.*,b.* from a right join b on a.b_id = b.id; 内连接:只列出两张表关联查询符合条件的记录 sel
阅读全文
摘要:列表如下: 基本使用语法: select max(age) from t_student; select min(age) from t_student; 聚合函数经常会结合分组查询,出现在众多的SQL笔试题中,对于SQL笔试题,唯有多练
阅读全文
摘要:1,数据库的三大范式 第一范式:列不可分第二范式:要有主键第三范式:不可存在传递依赖比如商品表里面关联商品类别表,那么只需要一个关联字段product_type_id即可,其他字段信息可以通过表关联查询即可得到如果商品表还存在一个商品类别名称字段,如product_type_name,那就属于存在传
阅读全文
摘要:序列化是为了保持对象在内存中的状态,并且可以把保存的对象状态再读出来。 什么时候需要用到java序列化? 1,需要将内存的对象状态保存到文件中 2,需要通过socket通信进行对象传输时 3,我们将系统拆分成多个服务之后,服务之间传输对象,需要序列化
阅读全文
摘要:并发: 同一个CPU执行多个任务,按细分的时间片交替执行 并行: 在多个CPU上同时处理多个任务
阅读全文
摘要:Iterator可以遍历Set和List,而ListIterator只能遍历List Iterator只能单向遍历,而ListIterator可以双向遍历 ListIterator继承与Iterator接口
阅读全文
摘要:MVC是对Web层做了进一步的划分,更加细化 Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。View(视图) - 视图代表模型包含的数据的可视化,比如HTML,JSP,Thymeleaf,FreeMarker等等Controller(控制器) - 控制器作用于模型和视图上
阅读全文
摘要:1,JavaEE将企业级软件架构分为三个层次: Web层:负责与用户交互并对外提供服务接口业务逻辑层:实现业务逻辑模块数据存取层:将业务逻辑层处理的结果持久化,方便后续查询 2,看图: 3,每个层都有各自的框架 WEB层:SpringMVC,Struts2,Struts1业务逻辑层:Spring数据
阅读全文
摘要:1,转发: 发生在服务器内部的跳转,所以,对于客户端来说,至始至终就是一次请求,所以这期间,保存在request对象中的数据可以传递 2,重定向: 发生在客户端的跳转,所以,是多次请求,这个时候,如果需要在多次请求之间传递数据,就需要用session对象 3,面试官的问题: 在后台程序,想跳转到百度
阅读全文
摘要:存储的位置不同 Session:服务端Cookie:客户端 存储的数据格式不同 Session:value为对象,Object类型Cookie:value为字符串,如果我们存储一个对象,这个时候,就需要将对象转换为JSON 存储的数据大小 Session:受服务器内存控制Cookie:一般来说,最大
阅读全文
摘要:4大域对象 ServletContext context域HttpSession session域HttpServletRequet request域PageContext page 4大域对象的作用范围 page域: 只能在当前jsp页面使用 (当前页面)request域: 只能在同一个请求中使用
阅读全文
摘要:首先,对于我们现在来说,用JSP的内置对象来直接开发的基本没有了,除非是比较老旧的项目,jsp的内置对象,则是不需要在jsp页面中创建,直接可以使用。 其实,我们通过观察jsp生成的java文件可以发现,其背后是帮我们创建了这些对象,所以对象的创建方式还是没有改变的。 我们去观察背后生成java类,
阅读全文
摘要:技术的角度: JSP本质就是一个ServletJSP的工作原理:JSP->翻译->Servlet(java)->编译->Class(最终跑的文件) 应用的角度: JSP=HTML+JavaServlet=Java+HTML各取所长,JSP的特点在于实现视图,Servlet的特点在于实现控制逻辑
阅读全文
摘要:首先,要明确一点,Servlet是单实例的,这个很重要! 生命周期的流程: 创建对象-->初始化-->service()-->doXXX()-->销毁 创建对象的时机: 1,默认是第一次访问该Servlet的时候创建2,也可以通过配置web.xml,来改变创建时机,比如在容器启动的时候去创建,Dis
阅读全文
摘要:JavaScript的原型有一个关键的作用就是来扩展其原有类的特性,比如下面这段代码,给String扩展了hello方法。很多的框架就是采用这种方式来进行扩展,从而让框架更易用。
阅读全文
摘要:谈这个问题的关键三要素,异步交互,XMLHttpRequest对象,回调函数。 下面,看图,传统模式跟Ajax工作模式的对比: 早期,预计是以XML为主要的传输数据格式,所以Ajax的最后一个字母就是代表XML的意思,不过现在基本是json为主。
阅读全文
摘要:什么是兼容性问题: 因为历史原因,不同浏览器支持的方法或属性有差异 解决办法: 1,判断当前是哪款浏览器内核,然后调用这个内核支持的方法,但获取内核的方式,通常会有误差2,存在性检查的方式(推荐)如果当前的对象或方法存在,则会是true,进入if,否则进入false 案例:比如判断当前浏览器是否支持
阅读全文
摘要:定时器在js中的应用非常广泛,比如首页的轮播图效果,网页的时钟,秒杀倒计时等等 就是采用定时器来实现的。 那么主要提供了两种定时器: <script type="text/javascript"> //一次性的 window.setTimeout(function () { alert(1); },
阅读全文
摘要:来,一图胜千言 padding:内边距 border:边框 margin:外边距 div+css,通常就用于布局。
阅读全文
摘要:面试场景: 面试官第一问: 请问,我现在编写一个类,类全名如下:java.lang.String,我们知道JDK也给我们听过了一个java.lang.String,那么,我们编写的这个String类能否替换到JDK默认提供,也就是说程序实际运行的时候,会加载我们的String还是JDK的String
阅读全文
摘要:ThreadLocal解决了什么问题?内部源码是怎么样的? 作用: 为每个线程创建一个副本 实现在线程的上下文传递同一个对象,比如connection 第一个问题:证明ThreadLocal为每个线程创建一个变量副本 public class ThreadLocalTest { private st
阅读全文
摘要:如果这个是面试官直接问你的问题,你会怎么回答? 一个专业的描述是,当多个线程访问一个对象时,如果不用进行额外的同步控制或其他的协调操作,调用这个对象的行为都可以获得正确的结果,我们就说这个对象是线程安全的 那么我们如何做到线程安全? 实现线程安全的方式有多种,其中在源码中常见的方式是,采用synch
阅读全文
摘要:1,JDK通过接口ExecutorService来表示线程池,通过工具类Executors来创建多种线程池对象 2,各种线程池的特点如下: newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优
阅读全文
摘要:1,所属的类不同: sleep方法是定义在Thread上wait方法是定义在Object上 2,对于锁资源的处理方式不同 sleep不会释放锁wait会释放锁 3,使用范围: sleep可以使用在任何代码块wait必须在同步方法或同步代码块执行 4,与wait配套使用的方法 void notify(
阅读全文
摘要:一图胜千言 灵魂画家出品。 上述的图有些简略,下面详细说明下,线程共有6种状态: new,runnable,blocked,waiting,timed waiting,terminated 1,当进入synchronized同步代码块或同步方法时,且没有获取到锁,线程就进入了blocked状态,直到
阅读全文
摘要:因为java有个重要的特性,叫垃圾自动回收机制,所以答案是多线程,这里面有两部分,主线程(用户线程),垃圾回收线程GC(守护线程)同时存在。
阅读全文
摘要:我们常说的方式有以下三种: 继承Thread实现Runable接口实现Callable接口(可以获取线程执行之后的返回值) 但实际后两种,更准确的理解是创建了一个可执行的任务,要采用多线程的方式执行, 还需要通过创建Thread对象来执行,比如 new Thread(new Runnable(){}
阅读全文
摘要:以下这道题,在实际开发中,并不会这么写。 这个是面试官为了考察大家对finally的认识,而苦思冥想出来,我猜的。 public static void main(String[] args) { System.out.println(finallyTest()); } public static
阅读全文
摘要:throw,作用于方法内,用于主动抛出异常throws, 作用于方法声明上,声明该方法有可能会抛些某些异常针对项目中,异常的处理方式,我们一般采用层层往上抛,最终通过异常处理机制统一处理(展示异常页面,或返回统一的json信息),自定义 异常一般继承RunntimeException,我们去看看Hi
阅读全文
摘要:IOException,SQLException,FileNotFoundException,NoSuchFileException,NoSuchMethodException
阅读全文
摘要:此类异常,编译时没有提示做异常处理,因此通常此类异常的正确理解应该是“逻辑错误” 算数异常,空指针,类型转换异常,数组越界,NumberFormateException(数字格式异常,转换失败,比如“a12”就会转换失败)
阅读全文
摘要:异常体系如下: Error是虚拟机内部错误 栈内存溢出错误:StackOverflowError(递归,递归层次太多或递归没有结束)堆内存溢出错误:OutOfMemoryError(堆创建了很多对象) Exception是我们编写的程序错误 RuntimeException:也称为LogicExce
阅读全文
摘要:当执行序列化时,我们写对象到磁盘中,会根据当前这个类的结构生成一个版本号ID 当反序列化时,程序会比较磁盘中的序列化版本号ID跟当前的类结构生成的版本号ID是否一致,如果一致则反序列化成功,否则,反序列化失败 加上版本号,有助于当我们的类结构发生了变化,依然可以之前已经序列化的对象反序列化成功
阅读全文
摘要:1,分类 按方向分:输入流,输出流 (注意,是站在程序的角度来看方向),输入流用于读文件,输出流用于写文件 按读取的单位分:字节流,字符流 按处理的方式分:节点流,处理流 比如,FileInputStream和BufferedInputStream(后者带有缓存区功能-byte[]) IO流的4大基
阅读全文
摘要:我们分析下JDK里面的Stack源码,会发现其实非常简单 首先,栈的特点是FILO(First In Last Out) 其次,底层的数据结构我们采用数组的方式 来,看几个关键的源码,一目了然 存: 取: 栈顶弹出元素
阅读全文
摘要:来吧,我们看看 ArrayList:线程不安全,效率高,常用Vector:线程安全的,效率低我们看Vector的源码: public synchronized void ensureCapacity(int minCapacity) { if (minCapacity > 0) { modCount
阅读全文
摘要:1,首先,来看看其他几个相关的类 Hashtable是线程安全的,但效率低HashMap是线程不安全的,但效率高Collections.synchronizedMap(),工具类提供了同步包装器的方法,来返回具有线程安全的集合对象性能依然有问题 public static <K,V> Map<K,V
阅读全文
摘要:此处,我们好好谈谈HashMap 主要关注几个点: 1,初始化大小是16,如果事先知道数据量的大小,建议修改默认初始化大小。 减少扩容次数,提高性能 ,这是我一直会强调的点2,最大的装载因子默认是0.75,当HashMap中元素个数达到容量的0.75时,就会扩容。 容量是原先的两倍3,HashMap
阅读全文
摘要:HashSet的存储原理或者工作原理,主要是从如何保证唯一性来说起。 这里面主要有3个问题,需要回答? 第一,为什么要采用Hash算法?有什么优势,解决了什么问题? 第二,所谓哈希表是一张什么表? 第三,HashSet如何保证保存对象的唯一性?会经历一个什么样的运算过程? 首先,我们要明确一点,Ha
阅读全文
摘要:1,底层数据结构的差异 ArrayList,数组,连续一块内存空间LinkedList,双向链表,不是连续的内存空间 2,一个常规的结论 虽然不严谨,但也可以应付很多面试了 ArrayList,查找快,因为是连续的内存空间,方便寻址,但删除,插入慢,因为需要发生数据迁移LinkedList,查找慢,
阅读全文
摘要:这简直是一道送分题,简单到我都不好意思写出来,但居然有人会搞错,汗! List(有序,可重复) Set(无序,不可重复)
阅读全文
摘要:来,先来一道考题,你看做对了吗? Integer i1 = new Integer(12); Integer i2 = new Integer(12); System.out.println(i1 == i2); Integer i3 = 126; Integer i4 = 126; int i5
阅读全文
摘要:这道题目一般出现在(笔试-选择题) 举例说明即可: 向上转型:Person person = new Student(); 安全的向下转型:Teacher teacher = (Teacher)person; 不安全的
阅读全文
摘要:如何实现递归求斐波那切数列第N个数字的值(传说中的不死神兔就是这个问题) 数字的规律:1,1,2,3,5,8,13,21.... 所以,我们可以分析编写如 public static int getFoBo(int n) { if (n < 0) { return -1; } if (n == 1
阅读全文
摘要:这道算法题一般考查的递归的编程技能,那么我们回顾下递归程序的特点: 1,什么是递归? 递归,就是方法内部调用方法自身递归的注意事项:找到规律,编写递归公式找到出口(边界值),让递归有结束边界注意:如果递归太多层,或者没有正确结束递归,则会出现“栈内存溢出Error”!问题:为什么会出现栈内存溢出,而
阅读全文