自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据库 和JDBC基本操作

数据库DB:Database存放数据的库数据:规范,半规范,不规范数据数据安全 重要DB(文件集合,类似.dox,.doxc文件),而操纵和管理数据库的软件,用来建立,使用,和维护数据库 叫做DBMS(Database Management System)DB种类文本文件/二进制文件xls文件(表格文件)AccessMysql(免费,多平台)SQL ServerOracle/DB2SQLite(手机使用)表数据库里面最基础的一个元素表:table– 列:列,属性,

2020-07-31 22:54:08 169

原创 Java 邮件 Mail编程

邮件使用Web 邮件管理界面邮件客户端软件(Outlook/Foxmail等)邮件客户端邮件服务端– 发送邮件服务器– 接收邮件服务器主要协议(发送端口25,接收端口110)邮件中继:通过别人的邮件服务器,将你的邮件系统的送到目标地址Java Mail程序通过Java Maik的API能够联系上邮件服务器,进行邮件的收发操作– 需要邮件服务器的支持,需要知道pop服务器和smtp服务器信息Java Mail工具包javax.mail包 和jzvzx.mail.inte

2020-07-30 22:53:23 398

原创 LeetCode 1143 最长公共子序列

题目给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。示例 1:输入:text1 = "abcde", text2 = "

2020-07-29 18:13:10 122

原创 LeetCode 63 不同路径二

题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?思路 动态规划和前面62题思路一样,就是需要加一个判断的条件是否有障碍物class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) {

2020-07-28 14:52:03 75

原创 LeetCode 62 不同路径

题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?思路 动态规划动态规划,寻找状态转移方程,就是递推公式。找到重复的最近子问题需要存储中间结果这个题目的话,类似斐波拉契数,自底向上的进行思考递归。当前格子到终点的路线个数,等于下面和右边格子路线个数相加这样,可以直接递归,然后很多格子是重复计算的,所以用一个二维数组,存储计算

2020-07-28 13:21:46 69

原创 Java AIO 通讯编程

AIO通讯异步非阻塞的通讯方式,就是不需要等待一方的数据操作完成,会自动执行回调函数处理的读写操作主要类– AsynchronousServerSocketChannel 服务器接收请求通道bind 绑定在某一端口 accept 接收客户端请求– AsynchronousSocketChannel Socket 通讯通道read write– CompletionHandler 异步处理类completed 操作完成后异步调用方法 failed 操作失败后异步调用方法package

2020-07-27 20:30:45 177

原创 Java NIO 编程

BIO编程传统的TCP和UDP编程通讯:Blocking I/O一方在写入或读 数据时过慢,另一方需要等待NIO编程,同步非阻塞Non-Blocking I/O提供非阻塞通讯等方式避免同步I/O通讯效率过低一个线程可以管理多个连接减少线程多的压力JDK1.4引入,1.7升级为NIO2.0(包括AIO)主要在java.nio包中主要类– Buffer 缓冲区– Channel 通道– Selector 多路选择器Selector 在这里就选择的作用,哪一个数据通道有响应

2020-07-27 20:10:09 103

原创 LeetCode 33 搜索旋转排序数组

题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], targ

2020-07-26 01:59:18 96

原创 基本数据类型及转型

基本数据类型1、整数型:byte (1字节) short(2字节) int(4字节) long(8字节)2、浮点型:float(4字节) double(8字节)3、字符型:char(2字节)4、布尔型:boolean(1字节)转型boolean类型不参与自动类型转换,把范围小的数据可以直接转为 范围大的数据例如: int a = 10; double b = a;强制类型转换,把范围大的数据 放到范围小的数据中,不用标记会报错double b = 10.1;int

2020-07-24 23:49:06 326

原创 367 有效的完全平方数

题目给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。示例 1:输入:16输出:True示例 2:输入:14输出:False思路一 二分查找设置上下界,然后进行判断class Solution { public boolean isPerfectSquare(int num) { if (num == 1) return true; int l = 2, r = num;

2020-07-24 16:18:39 60

原创 LeetCode 69 X的平方根

题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。思路一,二分查找使用二分查找,首先明白二分查找的条件目标函数需要单调性有确定是上下界可以通过索引访问这个题目可以在 1~X的范围中去寻找这个x的平方根。代码来官方题解

2020-07-24 14:56:13 76

原创 LeetCode 55 跳跃游戏

题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。思路一设置一个

2020-07-20 01:22:15 64

原创 LeetCode 122买卖股票的最佳时机Ⅱ

题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(

2020-07-19 23:54:39 85

原创 Java HTTP编程

网页访问网页是特殊

2020-07-19 14:56:58 454

原创 LeetCode 455 分发饼干

题目假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小朋友最多只能拥有一块饼干。思路分发饼干 想法就是每一次都给孩子最小合适的饼干。太小的饼干不满足孩子胃口

2020-07-18 20:19:28 100

原创 JAVA 实现 UDP协议和TCP协议

UDP协议UDP(User Datagram Protocol)用户数据报协议,面向无连接协议不保证可靠的数据传输速度快,可在较差网络下使用计算机通讯:数据从一个IP的port出发,运输到另外一个IP的port上UDP:无连接无状态的通讯协议– 发送方发送消息,如果接收方刚好在目的地,就可以接受。如果不在,发送的消息就丢失了– 发送方也无法得知是否消息发送成功– UDP的好处就是简单,节省,经济JAVA中实现UDP协议DatagramSocket类:通讯的数据

2020-07-16 23:46:28 253

原创 LeetCode 200 岛屿数量

题目你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:[['1','1','1','1','0'],['1','1','0','1','0'],['1','1','0','0','0'],['0','0','0','0','0']]输出: 1示例 2:输入:[['1','1','0','0','0'],['

2020-07-16 19:22:26 92

原创 LeetCode 433 最小基因变化

题目一条基因序列由一个带有8个字符的字符串表示,其中每个字符都属于 “A”, “C”, “G”, "T"中的任意一个。假设我们要调查一个基因序列的变化。一次基因变化意味着这个基因序列中的一个字符发生了变化。例如,基因序列由"AACCGGTT" 变化至 “AACCGGTA” 即发生了一次基因变化。与此同时,每一次基因变化的结果,都需要是一个合法的基因串,即该结果属于一个基因库。现在给定3个参数 — start, end, bank,分别代表起始基因序列,目标基因序列及基因库,请找出能够使起始基因序列

2020-07-16 00:51:19 253

原创 LeetCode 51 N皇后

方法1:回溯在建立算法之前,我们来考虑两个有用的细节。一行只可能有一个皇后且一列也只可能有一个皇后。这意味着没有必要再棋盘上考虑所有的方格。只需要按列循环即可。对于所有的主对角线有 行号 + 列号 = 常数,对于所有的次对角线有 行号 - 列号 = 常数.这可以让我们标记已经在攻击范围下的对角线并且检查一个方格 (行号, 列号) 是否处在攻击位置。现在已经可以写回溯函数 backtrack(row = 0).从第一个 row = 0 开始.循环列并且试图在每个 column 中放置皇后.

2020-07-13 00:48:37 79

原创 Java多线程应用之定时任务执行

之前使用Thread/Executor/Fork-Join的多线程三种方式前一种是立刻执行的,后俩种是框架来进行调度,我们不了解,需要一种定时执行多线程的方式。定时执行固定某一个时间点一级运行以某一周期简单定时器机制– 设置计划任务,也就是在指定的时间开始执行某一任务– TimerTask 用来封装任务 ,也是继承与Runnable接口– Timer类 定时器public class TimerTest { public static void main(String[] arg

2020-07-12 00:36:59 2441 1

原创 Java并发协作控制之相关API

线程协作Thread/Executor/Fork-Join– 线程启动,运行,结束– 线程之前缺少协作synchronized 同步– 限定只能一个线程进入关键区– 简单粗暴,性能损失大LockLock实现同步的效果– 实现更复杂的临界区结构– tryLock方法可以预判锁是否空闲– 允许分离读写操作,多个读,一个写– 性能更好ReentrantLock 类,可重入的互斥锁ReentrantReadWriteLock 类,可重入的读写锁lock和unlock函数奶茶店

2020-07-11 23:57:20 110

原创 多线程中Thread中wait(),sleep(),join()方法

join()这里join用法,在A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行。如果写入参数,就是等待几毫秒。参数是0的话就是一直等待,知道唤醒,等价于没有参数。join的原理,看源码public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); l

2020-07-11 22:43:01 907

原创 Java 并发数据结构

并发数据结构常用的数据结构是线程不安全的– ArrayList,HashMap,HashSet 非同步的– 多个线程同时读写这些数据结构时,可能会抛出异常或者数据错误传统的Vector,Hashtable等同步的集合性能过差并发的数据结构:数据添加或者删除– 阻塞式集合:当集合为空或者满时,等待– 非阻塞式集合:放集合为空或者满时,不等待,返回null或异常ListVector 同步安全,写多读少ArrayList 不安全Collections.synchronizedList

2020-07-11 21:07:02 321

原创 LeetCode 17 电话号码的字母组合

题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].思路一 递归+回溯将数字对应的字符串,都存储在hash表中第一个数字时,枚举它所有的字符第二个数字,继续在第一个数字的枚举上 继续枚举,形成字符串,一直到数字遍历结束class Solution { pub

2020-07-07 18:58:03 72

原创 LeetCode 169 多数元素 和Map.Entry

题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。思路一 暴力使用hash表来记录数组的元素,和出现个数k-v,k表示数组的元素,v表示元素出现的个数然后遍历哈希表,找到v最大的那个键值class Solution { public int majorityElement(int[] nums) { Map<Integer, Integer&gt

2020-07-07 16:40:50 154

原创 Java 并发框架Executor 和Fork-Join

并行计算业务:任务多,数据量大串行,并行– 串行编程简单,并行编程困难– 单个计算核频率下降,计算核数增多,整体性能变高(需要选择并行)并行困难(任务分配和执行过程的高度耦合)– 如何分配粒度,切割任务– 如何分配任务给线程,监督线程执行过程并行模式– 主从模式(Master-Slave)(主线程指挥副线程)– Worker模式(Worker-Worker)(所有线程都是平等的)Java并发编程– Thread/Runnable/Thread组管理– Executor框架– F

2020-07-07 15:13:31 1358

原创 LeetCode 78 子集

题目给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]思路一 回溯法(运用递归)首先,回溯法是一种探索所有潜在可能性找到解决方案的算法。如果当前方案不是正确的解决方案,或者不是最后一个正确的解决方案,则回溯法通过修改上一步的值继续寻找解决方案。这道题思路

2020-07-07 10:40:46 82

原创 LeetCode 50 pow(x, n)

题目实现 pow(x, n) ,即计算 x 的 n 次幂函数。说明-100.0 < x < 100.0n 是 32 位有符号整数,其数值范围是 [−231, 231-1 ] 。思路一 暴力循环class Solution { public double myPow(double x, int n) { if (n == 0) { return 1; } double res = 1.0;

2020-07-06 17:53:14 68

原创 Java 多线程管理

细粒度:线程之间有同步操作等待通知/唤醒终止线程状态NEW 刚创建RUNNABLE 就绪态(strat)RUNNING 运行中(run)BLOCK 阻塞(sleep)TERMINATED 结束线程阻塞和唤醒– sleep,时间一到,会自己醒来– wait——notify/notifyAll,等待,需要别人唤醒– join,等待另外一个线程结束– interrupt,向另外一个线程发送中断信号,该线程受到信号,会触发InterruptedException(可解除阻塞),并

2020-07-05 21:25:12 146

原创 LeetCode 22 括号生成

题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。思路一使用递归来实现我们往一个空的字符串里添加左右括号添加左括号条件(左括号个数小于总对数)添加右括号条件(已经添加的左括号个数大于右括号个数)当添加完括号后,将字符串加入数组中,就是一种可能了,同时终止递归class Solution { public List<String> generateParenthesis(int n) { List<S

2020-07-04 23:55:13 89

原创 递归

递归 Recursion递归-循环通过函数体来进行的循环java递归模板public void recur (int level, int param) { if (level > Max_level) { //递归终止条件 return; } process(level,param); //处理当前层的逻辑 recur(level:level+1, new_param); //下探到下一层

2020-07-04 15:34:35 96

原创 Java多线程信息共享

线程类通过继承Thread或实现Runnable通过start方法,调用run方法工作线程run结束后,线程退出粗粒度:子线程与子线程之间,和main线程之间缺乏交流细粒度:线程之间有信息交流通讯通过共享变量达到信息共享JDK原生库暂不支持发送消息...

2020-07-03 23:39:38 116

原创 LeetCode 590 N叉树的后序遍历

题目给定一个 N 叉树,返回其节点值的后序遍历。比如给定一个节点U,其子节点V1,V2,V3, 那么他的后序遍历顺序为[V1的子节点,V1,V2的子节点,V2,V3的子节点,V3,U]思路一迭代手动维护一个栈,然后将根结点放入根结点拿出来,放入其子结点顺序为V1,V2,V3拿出栈顶元素,就是V3,然后放入V3的子节点以此类推这样的遍历顺序为[U,V3,V3的子节点,V2,V2的子节点,V1,V1的子节点]遍历顺序相反一些,就是其后序遍历顺序代码class Solution {

2020-07-03 00:13:18 145

原创 Java 多进程简介和java实现多线程

多进程概念当前的操作系统都是多任务OS每个独立执行的任务就是一个进程OS将时间划分为多个时间片(时间很短)每个时间片内将CPU分配给某一任务,时间片结束,CPU自动回收,再分配给另外任务。从外部看,所有任务都是同时在执行,但在CPU上,任务是按照串行依次运行(单核CPU)。如果能多核,多个进程任务可以并行。但是在单核上,多进程只能串行执行。...

2020-07-02 01:42:20 992

原创 LeetCode 144 二叉树的前序遍历

题目给定一个二叉树,返回它的 前序 遍历。思路一 递归class Solution { //递归 public List<Integer> preorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<>(); helper(root, list); return list; } public void he

2020-07-01 21:22:04 55

空空如也

空空如也

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

TA关注的人

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