自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode刷题 跳跃游戏 II java版

先看题目: 先看下题目,感觉很常规: 当时写下一个公式,nums[i] + i > nums.length - 1; 不过真的写代码有点费劲。 参考了一下大佬们的解法: https://leetcode-cn.com/problems/jump-game-ii/solution/tiao-yue-you-xi-ii-by-leetcode-solution/ 讲的很详细,我自己理解了几遍,下面写一下自己的想法: 第一种办法: 反向贪心查找,这个是比较常规可以想到的,先去看要到达倒数第二步,需要满

2021-06-30 16:21:18 360

原创 leetcode刷题之三数之和 --java版

先看题目: 这个和之前做的第16题思想是一致的,先找到一个固定的nums[i], 然后不断变化left和right,然后去找到满足和为0的要求: public List<List<Integer>> threeSum(int[] nums) { Arrays.sort(nums); if (nums.length < 3) { return new ArrayList<>(); }

2021-06-04 10:46:05 388

原创 Java刷题之 最接近的三数之和 --差分

先看题目: 刚刚看完题目,觉得比较简单,觉得这个就直接写两个变量,先是内部比一下,然后再写一个变量, 将每次内部的值和外部比一下,感觉就ok。结果很打脸,因为是3个数,还是没有那么的快速搞定。 后面转念一想,之前做过那么多字符串递归回溯的,我可以穷举出每3个字符串,然后求和,和target值比较,找出差值最小,其中,中间可能还需要用map缓存一想每个数组的和作为key,然后将与target的差值作为value。想的可真麻烦。我还真的去尝试了,无果 public int threeSumClosest(in

2021-06-04 09:38:10 317

原创 leetcode 字符串处理 --基本计算器 II --java版

先看题目: 第一感觉: 应该是分为各种情况去计算,加减乘除相关的计算。自己先写了一版,比较挫,感觉数字老是比运算符号慢一步 public int calculate(String s) { int result = 0; Deque<Integer> stack = new LinkedList<>(); stack.push(1); int numTemp = 0; for (int i =

2021-06-02 21:41:14 422 4

原创 leetcode刷题 --栈的使用 java版

先看题目: 刚刚看到题目,感觉很简单,这个题目怎么可能是hard呢?额,后面持续打脸。 一开始完全没有意识到这个是个不断迭代,寻找最长的长度的问题。直接上代码: public int longestValidParentheses(String s) { int result = 0; Deque<Character> stack = new LinkedList<>(); for (int i = 0; i < s.l

2021-06-01 16:45:25 423 2

原创 回溯算法大探秘 --java版

回溯算法学习: 找了几个相似的题目,统一学习了一下: 第一个题目:大小字母的全排列 题目描述: 一开始想用回溯法,对回溯法了解的并不那么深入,去百度了一下,觉得这篇文章写得很好, 回溯法 现在理解到,回溯法就是需要有一个结束条件,满足结束条件,就添加或者返回元素,不满足时,去寻找满足的条件,然后按照题目的要求,去寻找满足条件的情况。 上面是形式上的,从具体的遍历方式上,类似于深度搜索,先一步一步遍历,知道找到满足条件的,然后开始往前倒推,倒到上一步,找到满足条件的,这样一直倒推到最后,所有的情况都被遍历完

2021-05-29 17:39:39 307 2

原创 leetcode刷题之1160拼写单词 java题解(超详细)

题目如下图所示: 一开始有点懵,然后想着暴力求解的话,用words里面的每个单词去chars里面去查找,如果全都找到了就加一,好像有点蠢,后面参考了一下网上的一些想法,去比较words里面每个字母的个数,是不是比chars里面字母的个数小或者等于,是的话,就能组成 自己试了一下,还可以: public int countCharacters(String[] words, String chars) { Map<Character, Integer> map = new Has

2020-11-21 15:26:30 575 3

原创 Mysql实站练习

今天开始,我们将学习mysql,用到的工具是sqlyog

2020-11-12 09:05:30 180

原创 小白都能懂的设计模式 java版 动态代理模式 通用代理类(超详细)

将上一篇写的动态代理进行总结回顾

2020-11-10 09:07:10 207

原创 小白都能懂的设计模式 java版 动态代理模式 实战练习(超详细)

以之前静态代理租房为例,看动态代理如何实现: 静态代理模式实战练习 对了,还找到了JDK1.8一个在线文档还不错,推荐给大家: jdk1.8API文档 先要了解上一节说的两个类,proxy以及InvocationHandle 这一部分先写好了,后面详细解释 package proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;

2020-11-06 22:34:20 302

原创 小白都能懂的设计模式 java版 动态代理模式 基本概念介绍

动态代理模式相对比较难理解,我们将通过具体例子带大家学习一下

2020-11-05 09:05:39 186

原创 小白都能懂的设计模式 java版 静态代理模式再理解 实战练习(超详细)

通过具体的实践来说明下代理模式的这两点: 公共事物交给代理角色,实现了业务分工 公共事物发生变化是,方便集中管理

2020-11-03 12:07:25 236

原创 小白都能懂的设计模式 java版 静态代理模式实战练习(超详细)

静态代理: 角色分析: 抽象角色:一般使用接口或者是抽象类来解决 真实角色:被代理的角色 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作 客户:访问代理对象的人 以一个租房子的例子来讲一下静态代理模式: 房客去租房子,不去直接找房东,而是通过中介来租房,中介通常会有些附加操作 来看下代码: 租房接口: package agent; //租房 public interface Rent { public void rent(); } 房东对象: package agent; /

2020-11-03 12:02:35 337

原创 原创 小白都能懂的设计模式 java版 代理模式(总览)

为什么学习代理模式呢? 这个是SpringAOP的底层 代理模式分类: 分为静态代理和动态代理 这个是代理模式,大概模型图: 后续更新

2020-11-02 09:01:21 223

原创 小白都能懂的设计模式 java版 桥接模式回顾总结(超详细)

具体看下桥接模式如何实现及应用场景

2020-10-30 09:12:44 212

原创 小白都能懂的设计模式 java版 桥接模式具体实现(超详细)

桥接模式:是将抽象部分与 实现部分分离,使他们可以队里变化,是一种对象结构型模式,又称为柄体模式或者接口模式 实战一下,将品牌和类型相互分离,当有需要的时候互相组合: 先写一个品牌的接口 package bridge; //品牌 public interface Brand { void info(); } 分别实现一个苹果品牌还有一个联想品牌: package bridge; //苹果品牌 public class Apple implements Brand { @Overrid

2020-10-30 09:12:11 442 6

原创 小白都能懂的设计模式 java版 适配器模式 回顾总结(超详细)

适配器模式: 将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本不兼容而不在一起工作的那些类可以一起工作 这个会更新~

2020-10-29 09:05:52 183

原创 小白都能懂的设计模式 java版 适配器模式具体实现(超详细)

适配器模式是一种结构型模式 适配器模式作用: 从程序的结构上实现松耦合,可以扩大整体的类结构,用来解决更大的问题 适配器模式可以想象成一个USB网线转换器 具体代码会更新

2020-10-28 10:35:31 243

原创 小白都能懂的设计模式 java版 原型模式 存在浅拷贝问题以及解决办法(超详细)

在这一节里,https://blog.youkuaiyun.com/weixin_45806131/article/details/109282894 是一个浅拷贝,v1和v2同时指向date,理论上应该v2也有一个自己的date,也就是进行一个深拷贝 这个会更新

2020-10-26 09:02:17 189

原创 小白都能懂的设计模式 java版 原型模式 原理和实战练习(超详细)

原型模式也是一种创建型模式: 表示以某个东西为原型,进行拷贝 这个比较简单,直接可以看代码: 先写一个radio对象 package prototype; import javax.xml.crypto.Data; import java.util.Date; //实现一个接口Cloneable, 重写一个方法clone() //video类 public class Video implements Cloneable { private String name; private Date

2020-10-26 08:59:19 305 2

原创 小白都能懂的设计模式 java版 建造者模式 拓展小节(超详细)

上一篇的例子中 https://blog.youkuaiyun.com/weixin_45806131/article/details/109235373 是Build模式的常规用法,Director类在Bulider模式中具有非常重要的作用,用于指导具体构建者如何构建产品,控制调用的先后顺序,并且向调用者返回完整的产品类,但是有时候需要简化系统结构,可以把Director和抽象建造者进行结合 可以通过静态内部类方式实现零件无需装配构造,这种方式更加灵活,更加符合定义 比如麦当劳的套餐,服务员(具体建造者)可以随意搭配

2020-10-24 06:00:09 169

原创 小白都能懂的设计模式 java版 建造者模式 具体实现(超详细)

建造者: package build; //抽象的建造者,定义一些方法 public abstract class Builder { abstract void bulidA(); //地基 abstract void bulidB(); //钢筋工程 abstract void bulidC(); //铺电线 abstract void bulidD(); //粉刷 //完工,得到具体的产品 abstract Product getProduc

2020-10-23 09:11:54 188 4

原创 小白都能懂的设计模式 java版 建造者模式 基本概念

建造者模式是一种创建型模式,提供了一种创建对象的最佳方式 可以将一个复杂对象的构建和表示分离,使得同样的构建过程可以创建不同的表示 在用户不知道对象的建造过程和细节,可以直接创建复杂对象 举个例子: 工厂(建造者模式):复杂制造汽车(组装过程和细节在工厂内完成) 汽车购买者(用户):只需要说出产品型号(对象的类型和内容),购买可以直接使用(不需要知道汽车如何组装) 这些是建造者模式的基本概念,具体的还是要通过代码实践了解更深入 好了,今天先到这里~ ...

2020-10-23 08:46:38 123

原创 小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)

比如要生产华为手机,华为路由器,小米手机,小米路由器 先写路由器和手机的接口: package abstract1; //手机产品接口 public interface IphoneProduct { void start(); void shutdown(); void callup(); void sendMes(); } package abstract1; //路由器产品接口 public interface IRouteProduct { void

2020-10-22 11:02:10 390 4

原创 小白都能懂的设计模式 java版 抽象工厂模式 基本概念

抽象工厂模式: 围绕一个超级工厂创建其他工厂,该超级工厂为其他工厂的工厂 它提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类 优点: 具体产品在应用层的代码隔离,无需关心创建细节 将一个系列产品放到一起创建 缺点: 规定了可能被创建产品集合,扩展新产品困难 增加了系统抽象性和理解难度 具体的代码会再更新 好了,今天先到这里~ ...

2020-10-21 09:02:26 121

原创 小白都能懂的设计模式 java版 简单工厂模式和工厂模式小节

先看下工厂模式框图: 工厂模式每次都要实现一个车工厂,不用改动原来的代码,但是代码的数量增加很多 从结构复杂度:简单工厂比较简单 从代码复杂度:简单工厂比较简单 从编程复杂度:简单工厂比较简单 从管理复杂度:简单工厂比较简单 根据设计原则,使用工厂设计模式,根据实际业务,选择简单工厂模式比较方便 ...

2020-10-21 08:51:37 337

原创 小白都能懂的设计模式 java版 工厂模式实战练习(超详细)

上一节说了,简单工厂模式不满足开闭原则: https://blog.youkuaiyun.com/weixin_45806131/article/details/109153865 我们再看一下,工厂模式: 新建一个车工厂的接口: package methodFactory; //工厂方法模式 public interface CarFactory { Car getCar(); } 通过实现这个接口,新建五菱和特斯拉的车工厂 package methodFactory; public class W

2020-10-19 09:02:57 271 2

原创 小白都能懂的设计模式 java版 简单工厂模式实战练习(超详细)

我们原来写一个实现类: 先有一个接口: package factory.simple; public interface Car { void name(); } 写这个接口的两个实现类: 在这package factory.simple; public class Tesla implements Car { @Override public void name() { System.out.println("特斯拉"); } } package

2020-10-19 08:52:54 410 1

原创 小白都能懂的设计模式 java版 工厂模式 概念讲解

工厂模式作用: 实现了创建者和调用者分离 详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 满足OOP七大设计原则之: 开闭原则:一个软件的实体应该对外扩展开放,对修改关闭 依赖倒转原则:针对接口编程,不针对实现编程 迪米特法则:只与你最直接的朋友通信,避免与陌生人通信 核心本质: 实例化对象不使用new,用工厂方法代替 将选择实现类,创建对象统一管理和控制,从而将调用者和实现解耦 ...

2020-10-16 11:12:47 225

原创 java实现网络编程之 UDP多线程在线聊天(超详细)

这个涉及到多线程 发送端: package chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; p

2020-10-15 09:06:08 380 1

原创 java实现网络编程之 经典UDP通信 实现聊天(超详细)

用UDP模拟聊天: 发送端: package chat; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class UdpSenderDemo01

2020-10-14 09:01:39 626

原创 java实现网络编程之 经典UDP通信实战练习(超详细)

UDP不需要建立连接,但是需要知道对方的地址 同样通过代码来实战一下: 服务端: package network; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UdpClient { public static void main(String[] args) th

2020-10-13 09:01:57 353 2

原创 网络编程之 TCP,UDP的区别和联系

tcp,udp都是传输层的协议 简单通俗的讲一下tcp和udp之间的区别: TCP类似打电话 连接是稳定的, 建立连接需要三次握手,四次挥手, 客户端负责发送消息,服务器端处理消息, 传输完成后,释放连接,传输效率低 UDP类似发短信 不建立连接,是不稳定的, 客户端和服务器端没有明确的界限,都能发送和接收消息, 不管对方有无准备好,都可发送消息, 可能会受到DDOS(饱和攻击) 传输效率高 TCP三次握手,四次挥手简单解释: 三次握手: A:我要建立连接 B:知道了,建立连接吧 A:建立连接 四次挥手:

2020-10-13 08:51:47 262

原创 java实现网络编程之 经典TCP通信实战练习(超详细)

模拟tcp通信: 一个客户端的类,一个服务器端的类 下面看下具体实现: 客户端代码: package network; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; //客户端 public class TcpClient01 { public st

2020-10-12 09:00:49 562 2

原创 玩转java多线程 之多线程基础 回顾总结线程的创建

好了,回顾一下,创建线程的三种方式: package duoxiancheng; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; //回顾总结线程的创建 public class ThreadNew { public sta

2020-10-11 14:00:11 294 6

原创 玩转java多线程 之多线程基础 解决生产者消费者问题 线程池实践

线程池: 经常创建和销毁使用量特别大的资源,比如并发情况下的线程,对性能影响很大 通过提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中,可以避免频繁创建销毁,实现重复利用 线程池可以提高响应速度,降低资源消耗,便于线程管理 JDK5.0提供了线程池相关的api,executorService和excutors executorService:真正的线程池接口,常见子类ThreadPoolExecutor 执行任务,没有返回值,一般用来执行Runnable void execute(Runna

2020-10-11 13:50:28 371

原创 玩转java多线程 之多线程基础 解决生产者消费者问题 信号灯法实践

信号灯法实践: package duoxiancheng; //测试生产者消费者问题,信号灯法 public class TestPc2 { public static void main(String[] args) { TV tv = new TV(); new Player(tv).start(); new Watcher(tv).start(); } } //生产者:演员 class Player extends Thread {

2020-10-11 13:32:51 156

原创 玩转java多线程 之多线程基础 解决生产者消费者问题 管程法实践

管程法实践: package duoxiancheng; //测试生产者消费者模型,利用管程法缓冲区来解决 //生产者,消费者,产品,缓冲区 public class TestPc { public static void main(String[] args) { SynContainer synContainer = new SynContainer(); new Productor(synContainer).start(); new Con

2020-10-11 12:37:19 180

原创 玩转java多线程 之多线程基础 生产者消费者问题 以及 解决此类问题的方法

有两个线程,一个生产线程,一个消费线程 应用场景: 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者取走消费 假设没有商品,生产者将产品放入仓库,否则停止生产并等待,直到仓库中产品被消费者取走为止 如果有产品,消费者取走消费,否则停止消费等待,直到仓库中有产品为止 ...

2020-10-10 09:01:54 666

原创 玩转java多线程 之多线程基础 Lock锁实战练习

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

2020-10-10 08:50:14 609

空空如也

空空如也

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

TA关注的人

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