【黑马】MyBatis 是一款持久层框架,用于简化JDBC开发持久层就是负责将数据保存到数据库的那一层代码JavaEE三层架构:表现层、业务层、持久层表现层负责做页面展示的,业务层做逻辑处理,持久层对数据进行持久化框架框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型在框架的基础上构建软件编写更加高效、规范、通用、可扩展。
【狂神】多线程(含内部类、Lambda) 多个线程操作同一个资源并发:同一个对象被多个线程同时操作处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象这时候我们就需要线程同步。线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用实现同步需要队列和锁线程同步在这里举三个例子来展示线程的三大不安全案例一:三个人抢10张票案例二:两个人取钱案例三:创建10000条线程。
【黑马java基础】单元测试、反射、注解 先来认识一下什么是注解?Java注解是代码中的特殊标记,比如@Override、@Test等,作用是:让其他程序根据注解信息决定怎么执行该程序。比如:Junit框架的@Test注解可以用在方法上,用来标记这个方法是测试方法,被@Test标记的方法能够被Junit框架执行。再比如:@Override注解可以用在方法上,用来标记这个方法是重写方法,被@Override注解标记的方法能够被IDEA识别进行语法检查。注解不光可以用在方法上,还可以用在类上、变量上、构造器上等位置。
【黑马java基础】网络通信 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。java提供了java.net.*包下提供了网络编程的解决方案通信的基本架构主要有两种形式:一种是CS架构(Client 客户端/Server服务端)、一种是BS架构(Brower 浏览器/Server服务端)。**BS架构的特点:**BS架构不需要开发客户端软件,用户只需要通过浏览器输入网址就可以直接从服务器获取数据,并由服务器将数据返回给浏览器,用户在页面上就可以看到各种数据了。
【黑马java基础】多线程 线程安全问题指的是,多个线程同时操作同一个共享资源的时候,可能会出现业务安全问题。比如:取钱的线程安全问题(场景:小明和小红是一对夫妻,他们有一个共同的账户,余额是10万元,如果小明和小红同时来取钱,并且2人各自都在取钱10万元,可能会出现什么问题呢?①小明线程步骤一先判断余额是否够,够②小红线程步骤一先判断余额是否够,够③因为小明线程判断够,所以银行吐出10万④银行账户更新为0元⑤因为小红线程判断够,所以银行吐出10万⑥银行账户更新为-10万元结果:2人都取钱10万,银行亏了10万。
【黑马java基础】特殊文件,日志 XML( 全称EXtensible Markup Language, 可扩展标记语言 )可扩展的意思就是里面的标签可以自己定义。本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系。XML的特点XML中的“<标签名>” 称为一个标签或一个元素,一般是成对出现的。XML中的标签名可以自己定义(可扩展),但必须要正确的嵌套。XML中只能有一个根标签。XML中的标签可以有属性。如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml。XML的创建。
【黑马java基础】IO流 ASCII(American Standard Code for Information Interchange): 美国信息交换标准代码,包括了英文、符号等。标准ASCII使用1个字节存储一个字符,首尾是0,总共可表示128个字符,对美国佬来说完全够用。汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储。汉字的第一个字节的第一位必须是1。注意:GBK兼容了ASCII字符集。Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
【黑马java基础】Lamda, 方法引用,集合{Collection(List, Set), Map},Stream流 集合的并发修改异常:就是使用迭代器遍历集合时,又同时在删除集合中的数据,程序就会出现并发修改异常的错误。list.add("王麻子");list.add("小李子");list.add("李爱花");list.add("张全蛋");list.add("晓李");list.add("李玉刚");// [王麻子, 小李子, 李爱花, 张全蛋, 晓李, 李玉刚]//需求:找出集合中带"李"字的姓名,并从集合中删除if(name.contains("李")){
狂神——JVM 从两个维度:内存效率、内存整齐度、内存利用率进行比较内存效率(内存碎片多不多):复制算法>标记清除算法>标记压缩算法(时间复杂度)内存整齐度:复制算法 = 标记压缩算法 > 标记清除算法内存利用率:标记压缩算法 = 标记清除算法 > 复制算法没有最好的算法,只有最合适的算法,所以GC也被称为分代收集算法存活率较低,所以在这个区域更适合用复制算法!老年代区域大,存活率较高。所以更适合用标记清除(如果内存碎片不是太多就可以使用)+ 标记压缩混合(内存碎片达到一定量级的时候就压缩)实现。
【黑马Java基础】正则表达式+异常 Java无法为这个世界上全部的问题都提供异常类来代表,如果企业自己的某种问题,想通过异常来表示,以便用异常来管理该问题,那就需要自己来定义异常类了。自定义异常种类:自定义运行时异常//保存一个合法的年龄try {System.out.println("底层执行成功!");System.out.println("底层出现了bug");System.out.println("年龄被成功保存:" +age);}else {//用一个异常对象封装这个问题。
代码随想录算法训练营第四天 | LeetCode24.两两交换链表中的节点 、19.删除链表中的倒数第N个节点 、面试题 02.07. 链表相交、142.环形链表II 文档讲解:https://programmercarl.com/0019.%E5%88%A0%E9%99%A4%E9%93%BE%E8%A1%A8%E7%9A%84%E5%80%92%E6%95%B0%E7%AC%ACN%E4%B8%AA%E8%8A%82%E7%82%B9.html。快慢指针法:分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。在你的代码中,具体的错误发生在。
代码随想录算法训练营第三天 | LeetCode203.移除链表元素 、707.设计链表、206.反转链表 文档讲解:https://programmercarl.com/0203.%E7%A7%BB%E9%99%A4%E9%93%BE%E8%A1%A8%E5%85%83%E7%B4%A0.html。文档讲解:https://programmercarl.com/0707.%E8%AE%BE%E8%AE%A1%E9%93%BE%E8%A1%A8.html。再定义一个pre,指向head前的节点,也就是NULL,还要设置个指针temp,保存cur->next;链表长度不固定,适合数据量不固定,查少,增删多的场景。
代码随想录算法训练营第二天 | LeetCode 977. 有序数组的平方、209. 长度最小的子数组 、59.螺旋矩阵Ⅱ 文档讲解:https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html。文档讲解:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html。虽然是两层循环,但是时间复杂度是看每个元素被操作的次数。
代码随想录算法训练营第一天 | LeetCode704. 二分查找、27. 移除元素 文档讲解:https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html。文档讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html。也可以用双向指针,left和right,left找到之后将right赋给left,left++,最后返回left的值,就是新数组的长度。数组的元素不能删除,只能覆盖。
【黑马Java基础】3、内部类、枚举、泛型 内部类是五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类。定义类、接口、方法时,同时声明了一个或者多个类型变量(如:),称为泛型类、泛型接口,泛型方法、它们统称为泛型。应用场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类。内部类有四种形式:成员内部类、静态内部类、局部内部类、匿名内部类。就是类中的一个普通成员,类似前面学到的普通的成员变量、成员方法。匿名类是一个子类,同时也是一个子类对象。
【黑马Java基础】2、3个OOP,API 就是用类设计对象处理某一个事物的数据时,应该把处理的数据,以及处理这些数据的方法,设计到一个对象中去。当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。重写后,方法的访问,Java会遵循就近原则b.print1();//方法重写//响应结果:666666666666多态是在继承/实现的情况下的一种现象,表现为:对象多态、行为多态(变量不多态,运行谁就是谁)多态的前提:有继承、实现。
【黑马Java基础】1、数组,方法 定义数组时直接给数组赋值//正常版本//简化版本什么类型的数组只能存放什么类型的数据。计算机中的程序都是在内存中执行的,计算机遇到代码之后会在内存中开辟一块空间,但暂时不装东西,会等到等号右边的东西进来。右边的代码也会新开辟一块区域,分三块存储(12,24,36)。然后右边会把数组地址交给左边的数组变量,用数据变量指向数组,然后进行访问。对象可以理解为就是个东西//响应结果//[代表是数组的地址,I代表是Int类型数组,@在哪个地址,在afb5f4df这个地址注意。