自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(119)
  • 收藏
  • 关注

原创 哈希函数的简单算法题

已知:无符号整数的范围0~2的32次方-1,现在有四十亿个无符号整数,求其中出现次数最多的那个数。可以使用的内存不超过一个G#经典解法:设置一个map(Integer,Integer),key值存数,value值存出现的次数。map中存储一个值至少需要4+4B=8B,map本身的索引什么的还会需要空间。40亿乘8B= 320亿B 差不多等于32G的空间,远远的超过1个G的空间。哈希解法把每个数求出一个哈希值,哈希值再模上100,把得到相同的余数的放到一个文件里面。每个文件大小是32G/100

2022-04-03 00:25:48 344

原创 什么是哈希函数

Hash函数又称为散列函数。是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出的值称为散列值或者消息摘要。其实就是你随便给我一个输入,我返回你一个固定长度的消息摘要。常见Hash函数的实现:1.MD5是一种被广泛使用的密码散列函数。MD5可以产生出一个128位(16个字节)的散列值。特点:压缩性:任意长度的数据,运算得出的MD5值长度都是固定的(128位)。容易计算:很容易从原数据计算出对应的MD5值。抗修改性:对原始数据的改动,得到的MD5值有很大的区别。强抗碰撞:已知原

2022-04-02 21:34:45 1349

原创 Springmvc--JSON

JSON(JavaScript Object Notation,js 对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁清晰的层次结构使得json成为理想的数据交换语言易于人的阅读和编写,同时也易于机器解析和生成,并有效提高网络传输效率。在JavaScript语言中,一切皆对象。因此,任何JavaScript支持的类都可以通过JSON来表示,例如字符串、数字、对象、数组等。对象表示为键值对,数据由逗号分隔花括号保存对象方括号保存数组.

2022-04-02 14:55:06 1244

原创 springmvc解决乱码问题

2022-04-01 22:14:03 229

原创 springmvc中form表单无法正常跳转到controller的问题

场景:controller为@Controllerpublic class EncodingController { @PostMapping("/e/t1") public String test1(String name, Model model){ model.addAttribute("msg",name); return "test"; }}前端form表单为<form action="/e/t1" method="pos

2022-04-01 21:22:15 1047

原创 springmvc接受请求参数以及数据回显

处理提交的数据1.提交的域名称和处理方法的参数名一致例如提交的URL为:http://localhost:8080/springmvc_05_controller_war_exploded/test/t1?name=yf处理的方法为@Controller@RequestMapping("/test")public class UserController { @RequestMapping("/t1") public String test1(String name, Mode

2022-04-01 20:53:39 258

原创 RestFul风格

ResuFul就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这种风格设计的软件可以更简洁、更有层次,更易于实现缓存等机制。资源资源:互联网的所有事物都可以被抽象为资源资源操作:使用POST、DELETE、PUT、GET分别对应添加、删除、修改、查询使用RESTful操作资源,可以通过不同的请求方式来实现不同的效果!例子不使用RestFul风格的时候public class RestFulController { @RequestMapping("/ad

2022-03-31 23:48:19 136

原创 Springmvc-Controller

控制器controller控制器负责提供访问应用程序的行为,通常通过接口定义或注解两种方法实现。控制器负责解析用户的请求并将其转换为一个模型在Springmvc中一个控制器可以包含多个方法。在Springmvc中对于Controller的配置方式有很多种1.实现Controller接口@FunctionalInterface//实现该接口的类获得控制器功能public interface Controller { //处理请求并返回一个模型与视图对象 @Nullable

2022-03-31 22:06:33 706

原创 使用注解开发springmvc

1.编写web.xml注册DispatcherServlet<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/jav.

2022-03-31 21:11:46 200

原创 SpringMVC原理

中心控制器DispatcherServletSpring的web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求分发到不同的处理器。SpringMVC框架和许多其他MVC框架一样,以请求为驱动,围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet实际上也就是一个servlet。简单分析执行流程1DispatcherServlet表示前端控制器,是整个SpringMVC的控制中心,用户发出请求,Dispatcher

2022-03-30 22:33:12 494

原创 SpringMVC开端

为什么要学习SpringMVC轻量级,简单易学高效,基于请求响应的MVC框架与Spring兼容性好,无缝结合约定优于配置功能强大:RESTful,数据验证,格式化,本地化,主题等简单灵活创建MVC项目新建一个Module,添加web支持!导入SpringMVC依赖配置web.xml注册DispatcherServlet...

2022-03-30 21:15:30 171

原创 web项目中那些莫名奇妙的404

首先检查自己的代码,有没有可能是路径的问题。检查完毕确认自己的路径什么的都没有问题,那很有可能就是依赖包的问题。排查步骤查看控制台输出,看一下是否缺少什么包如果jar包存在,显示无法输出,就在idea的项目发布中,添加lib依赖点击project Structure然后再点击artificial手动添加lib文件夹将jar包导入到lib文件夹下全部导入,然后重启tomcat就行了。...

2022-03-30 20:52:17 172

原创 线程通信--生产者消费者问题

解决方法1–管程法生产者将生产好的数据放入缓冲区,消费者从缓冲区拿出数据

2022-03-28 15:40:52 403

原创 多线程--Lock锁

从JDK5.0开始,java提供了更强大的线程同步机制–通过显示定义同步锁对象来实现同步。同步锁使用lock对象充当Lock接口是控制多线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象。ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是ReentrantLock,可以显示的加锁、释放锁。package com.yf.sy.

2022-03-28 13:55:59 298

原创 多线程--死锁问题

死锁:多个线程互相抱着对方需要的资源,然后形成僵持。对于自己已有的资源不愿意放手。package com.yf.syn;public class DeadLock { public static void main(String[] args) throws InterruptedException { MakeUp g1 = new MakeUp(0,"yf1"); MakeUp g2 = new MakeUp(1,"yf2"); g1.st

2022-03-28 12:48:13 265

原创 线程同步(synchronized)机制

处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象。这时候我们就需要线程同步。线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用。线程同步形成条件:队列+锁由于同一个进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突问题。为了保证数据在方法中被访问的正确性,在访问时加入锁机制,当一个线程获得对象的排它锁,独占资源,其他线程必须等待,使用后释放锁即可:存在以下问题一个线程持有锁会导致其他所

2022-03-27 23:58:11 608

原创 线程优先级和守护线程

线程优先级线程优先级代表着线程抢占CPU的概率,优先级越高越有可能抢占到CPU。不一定优先级越高的线程就先执行,只是代表概率。线程优先级在1~10之间。package com.yf.demo04;public class TestPriority { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()+"--->"+Thread.cur

2022-03-27 21:25:53 1154

原创 线程礼让和强制执行

线程礼让yiled线程礼让就是让线程停止执行,重新回到就绪状态再竞争cpu的使用权。线程礼让也可能会失败回到就绪状态重新竞争,可能在再次竞争的时候依然得到cpu使用权。package com.yf.demo04;public class TestYield { public static void main(String[] args) { MyYiled myYiled = new MyYiled(); new Thread(myYiled,"小红").

2022-03-27 20:30:46 300

原创 五种线程状态

线程创建Thread t = new Thread();线程对象一旦创建就进入到了新生状态就绪状态当调用start()方法,线程立即进入就绪状态,但不意味着立即调度执行运行状态进入运行状态,线程才真正执行线程体的代码块阻塞状态当调用sleep,wait或同步锁定时,线程进入阻塞状态,就是代码不往下执行,阻塞事件解除后,重新进入就绪状态,等待cpu调度。sleep(时间)指定当前线程阻塞的毫秒数sleep存在异常InterruptedException;sleep时间到达后线程进入就绪

2022-03-27 18:29:26 444

原创 多线程--静态代理

静态代理模式总结真实对象和代理对象都要实现同一个接口代理对象要代理真实角色优点真实角色只需要关注自己的事情,核心业务,琐碎的事情交由代理对象去做代理对象可以实现很多真实对象做不了的事情public class StaticProxy { public static void main(String[] args) { //lambda表达式 Runnable runnable = ()-> System.out.println("我爱你");

2022-03-27 17:08:03 267

原创 Lambda表达式

函数式接口functional Interface(函数式接口)是学习java8 lambda表达式的关键所在。函数式接口的定义:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。例如Runnable接口对于函数式接口,我们可以通过lambda表达式来创建该接口的对象为什么要使用lambda表达式避免匿名内部类过多可以让你的代码看上去很简洁去掉了一堆没有意义的代码,只留下核心的逻辑。可能刚刚开始的时候看lambda表达式不舒服,主要是还没有习惯嘛lamb

2022-03-27 16:47:46 392

原创 线程创建--实现Callable接口

步骤实现Callable接口,需要返回值类型重写call方法,需要抛出异常创建目标对象创建执行服务ExecutorService executorService = Executors.newFixedThreadPool(3);这是一个线程池,3,代表这个线程池里面可以有三个线程提交执行Future t1 = executorService.submit(testThread01);获取结果Boolean Boolean1 = t1.get();关闭服务executorServi

2022-03-27 15:47:08 238

原创 线程创建--实现Runnable接口

步骤写一个类实现runnable接口重写run()方法创建线程对象,通过线程对象来开启线程//创建线程方式2:实现Runnable接口,重写run方法,执行线程需要丢入runnalbe接口实现类.调用startpublic class TestThread2 implements Runnable{ @Override public void run() { for (int i = 0; i < 20; i++) { Syste

2022-03-27 14:53:58 527

原创 java--线程

Proceed与Thread进程是执行程序的一次执行过程,它是一个动态的概念。是资源分配的单位。通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是cpu调度和执行的基本单位。注意:现在很多线程都是模拟出来的,真正的线程是指有多个CPU,即多核,如服务器。如果模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换的很快,所以就有同时执行的错觉。核心概念线程就是独立的执行路径;在程序运行时,即使没有自己创建线程,后台

2022-03-27 01:32:00 425

原创 spring--事务管理

声明式事务:AOP编程式事务:需要在代码中,进行事务的管理为什么需要事务?为了保证事务的ACID原则原子性一致性隔离性持久性如果不配置事务,可能会存在数据提交不一致的情况如果我们不在spring中去配置声明式事务,我们就需要在代码中手动配置事务事务在项目的开发中十分重要,涉及到数据的一致性和完整性问题,不容马虎。<!--配置声明式事务--> <bean id="transactionManager" class="org.springframework.

2022-03-26 15:12:26 52

原创 spring--整合mybatis

步骤1.导入相关jar包junitmybatismysqlspring相关aopspring-mybatisspring-jdbc<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4

2022-03-26 12:06:10 885

原创 Spring--AOP实现方式三

使用注解实现@Aspect:定义此类是一个切面@Before:目标方法执行前的方法@After:目标方法执行后的方法@Around:目标方法执行前后的方法ProceedingJoinPoint joinPoint:切入的那个点,也就是目标方法定义注解类package com.yf.div;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.Signature;import org.aspectj.lan

2022-03-25 15:42:22 338

原创 spring--AOP实现方式二

1

2022-03-25 15:13:26 325

原创 Spring--AOP实现方式

什么是AOPAOP(Aspect oriented Programing)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。使用AOP需要导包<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --><dependency> <groupId>org.aspectj</groupId> <artifactId>

2022-03-25 14:42:32 530

原创 spring--动态代理

- 动态代理和静态代理角色一样- 动态代理是代理类是动态生成的,不是我们直接写好的!- 动态代理分为两类:基于接口的动态代理、基于类的动态代理- 基于接口的动态代理 ---JDK 动态代理- 基于类:cglib- java字节码实现:javasist动态代理的好处:静态代理有的好处,动态代理都有。一个动态代理类代理的是一个接口,一般就是对应的一类业务一个动态代理类可以代理多个类,只要是实现了同一个接口。package com.yf.demo04;import

2022-03-24 23:21:40 169

原创 spring--代理模式

为什么要学习代理模式?因为这就是SpringAOP的底层【SpringAOP和SpringMVC】代理模式的分类:- 静态代理- 动态代理静态代理角色分析:- 抽象角色:一般会使用接口或者抽象类来解决- 真实角色:被代理的角色- 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作- 客户:访问代理对象的人代理模式的好处- 可以使真实角色的操作更加纯粹!不用去关注一些公共的业务- 公共也就交给代理角色!实现了业务的分工!- 公关业务发生

2022-03-24 15:43:12 56

原创 通过反射来操作注解

先创建几个注解//类名的注解@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@interface Tableyf{ String value();}//属性的注解@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@interface fieldyf{ String columnName(); String type();

2022-03-24 12:31:31 475

原创 使用Java的方式配置Spring

完全不使用Spring的配置了,全部交由Java来做!JavaConfig是Spring的一个子项目,在spring4之后,它成为了一个核心功能。先写配置类//这个也会注册到spring容器中,因为它本来就是一个@Conponent//configuration代表这是一个配置类,就和我们之前看到的beans.xml是一样的@Configuration@ComponentScan("com.yf.pojo")@Import(YfConfig2.class)public class Y

2022-03-24 00:58:22 327 1

原创 spring--使用注解开发

在spring4之后,要使用注解进行开发,必须保证aop的包导入了使用注解要导入context约束,增加注解的支持。1.bean//等价于 <bean id="user" class="com.yf.pojo.User" />//@Componet 组件@Componentpublic class User {2.属性值 //等价于<property name="name" value="yf"/>// @Value("yf")

2022-03-24 00:24:53 170

原创 java--反射机制

Reflection是java被视为动态语言的关键,反射机制允许程序在执行期间借助于ReflectionAPI获得任何类的内部信息,并能直接操作任何对象的内部属性及方法。Class c = class.forName("java.lang.String")加载完类之后,在堆内存的方法区就产生了一个class类型的对象(一个类只有一个class类型的对象),这个对象就包括了完整的类的结构信息。我们可以通过这个对象看到类的结构,这个对象就像一面镜子,通过这个镜子看到类的结构,所以我们称之为反射。

2022-03-23 22:25:57 384

原创 java--注解

内置注解:@Override:表示一个方法声明打算重写超类中的另一个方法声明。@Deprecated:可以用于修饰方法,属性、类,表示不鼓励程序员这样去使用这样的元素,通常是因为危险或者有更好的选择。也就是废弃的方法属性和类。使用这个注解的时候会多一条杠杠,表示不推荐使用。@SuppressWarnings:抑制编译时的警告信息,这个与前两个注释不同,你需要添加一个参数才可以正确的使用,这些参数都是已经定义好了的,我们选择即可。元注解:...

2022-03-22 23:11:47 514

原创 spring--使用注解实现自动装配

1.导入约束<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schema

2022-03-22 20:28:48 145

原创 spring--bean的作用域和自动依赖

1.单例模式(spring默认机制): 一个bean在容器中只创建一个对象,get到的都指向这一个对象单线程使用这个<bean id="user" class="com.yf.pojo.User" p:name="yf" p:age="20" scope="singleton"/>2.原型模式:从容器中拿到的对象都不是同一个,一个bean在容器中可以创建多个对象。多线程使用这个<bean id="user2" class="com.yf.pojo.User" c:nam..

2022-03-22 15:05:11 366

原创 spring--依赖注入

1.构造器注入2.Set方式【重点】依赖注入:Set注入!依赖:bean对象的创建依赖于容器注入:bean对象中的所有属性,由容器来注入实体类:public class Student { private String name; private Address address; private String[] books; private List<String> hobbys; private Map<String,

2022-03-22 00:42:26 54

原创 spring--ioc创建对象的方式

1.使用无参构造,默认方式。public class User { private String str; public User(){ System.out.println("无参构造"); } public String getStr() { return str; } public void setStr(String str) { this.str = str; } @Over

2022-03-21 14:23:55 180

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除