Java
文章平均质量分 83
Three_ST
学习者
展开
-
web安全基础知识之单点登录-SSO几种原理图解(single sign on)
本文是个人学习的记录,系列文章传统的登录,就是根据用户名,密码,建立session,把session通过cookie发送到请求者的浏览器上,下次在登陆会发送cookie,这样服务器就知道登录了。SSO:单点登录,在一个地方登录一次,就可以访问所以的系统1.cookie(不能跨域2.session(共享session,在不同是系统,不同架构下的session共享麻烦3.使用token利用cookie,在用户登录后,在cookie中写入token,在用户访问其他系统的时候,验证一下token,如原创 2021-03-08 20:15:54 · 803 阅读 · 0 评论 -
centos7安装java-jdk1.8配置
准备通过ssh远程到服务器下载jdk1.8 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html我是下载到本地然后传给服务器,当然也可以用命令行下载连接中的文件wget https://www.oracle.com/webapps/redirect/signon?nexturl=https://download.oracle.com/otn/java/jdk/8u261-b12/a463452548924原创 2020-09-13 18:42:21 · 632 阅读 · 0 评论 -
计算机基础知识之-线程&进程
线程&进程死锁多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局(Deadly-Embrace) ) ,若无外力作用,这些进程(线程)都将无法向前推进。原因死锁产生的原因竞争不可抢占资源引起死锁通常系统中拥有的不可抢占资源,其数量不足以满足多个进程运行的需要,使得进程在运行过程中,会因争夺资源而陷入僵局,如磁带机、打印机等。只有对不可抢占资源的竞争 才可能产原创 2020-06-29 21:03:34 · 540 阅读 · 0 评论 -
数据结构算法-迭代与递归
巧妙的利用BFS实现递归题目来自LeetCode257.二叉树的所有路径给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入: 1 / \2 3 \ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3...转载 2019-12-09 11:34:07 · 178 阅读 · 0 评论 -
微信企业消息推送方案
微信企业消息推送企业微信/企业号注册微信认证消息推送服务号企业微信数据接口后台开发在软件程序实际应用中,在软件中推送可能还不能满足实际需求,需要把消息推送到用户手机,目前比较好的方式,可能是微信消息推送。因此做一个记录企业微信/企业号注册微信消息推送需要配合 企业微信号 做消息推送注册连接也可以使用微信公众号实现消息推送。微信认证不管什么方式都需要企业认证,认证方式如下:需要支付...原创 2019-12-02 11:20:48 · 4672 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(23)链表中环的入口节点-Java实现
题目23:链表中环的入口节点题目描述:一个链表中包含环,如何找出环的入口结点?例如,在图3.8的链表中,环的入口结点是结点3。解题思路:解决这个问题第一步是确定链表带有环。定义两个指针,一个一次一步,另一个一次两步,如果走得快的追上走得慢的,那么久包含环,如果没有追上那么就不包含;第二步是找到环的入口,同样利用两个指针来解决,p1和p2,如果链表中环有n个节点,则指针P1先在链...原创 2019-08-27 00:00:41 · 92 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(18)删除链表的重复节点-Java实现
题目18:删除链表中的重复的节点题目描述:在一个排序的链表中,如何删除重复的节点?解题思路:第一步确定是删除函数的参数,这个函数需要输入待删除链表的头节点,头结点可能与后面的节点重复,也就是说头结点也可能被删除,因此删除函数声明DeleteDuplicatedNode(ListNode pHead) 接下来遍历整个链表,如果当前节点(pNode)的值与下一个节点值相同,那么它就是...原创 2019-08-23 13:32:40 · 114 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(16)打印从1到最大的0位数 -Java实现
题目16:打印从1到最大的n位数题目描述: 输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。题目分析:跳进面试官的陷进:利用for循环从1到n输出:在字符串上模拟数字加法的解法:模拟一个大叔最容易想到的是使用字符串或者数组表示大数。一是在字符串表达的数字上模拟加法; 二是把字符串表达的数字打印出来把问题转换成数...原创 2019-08-22 23:46:08 · 85 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(15)数值的整数次方 -Java实现
高质量的代码代码的规范性:清晰地书写、清晰地布局、合理的命名 代码的完整性:功能测试、边界测试、负面测试第15题 数值的整数次方题目描述:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。题目分析:自以为简单的解法:直接不考虑边界输出(输入的指数小于0或者为负数)...原创 2019-08-22 22:36:28 · 106 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(14)二进制中的1的个数-Java实现
位运算位运算就是把数字用二进制表示之后,对每一位上的0或者1的运算。与(&) 0&0=0 0&1=0 1&1=1 或(|) 0|0=0 1|0=1 1|1=1 异或(^) 1^0=1 0^1=1 1^1=0 题目14:二进制中1的个数题目描述:请实现一个函数,输入一个整数,输出该数二进...原创 2019-08-21 22:56:08 · 131 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(22)链表中倒数第K个节点-Java实现
代码的鲁棒性Robust-程序能够判断输入是否合乎规范要求,并对不符合要求的输入予以合理的处理容错性是鲁棒性的一个重要体现提高鲁棒性的有效途径是进行预防性编程-指预见在什么地方会出现问题。题目22:链表中倒数第K个节点题目描述:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点...原创 2019-08-25 23:37:52 · 134 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(24)反转链表-Java实现
题目24:反转链表题目描述:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。解题思路:为了避免链表在节点i处断裂,需要在调整节点i的next指针前,把节点j保存下来,也就是在调整i的next指针时,除了需要知道i本身,还需要直到i的前一个节点h,定义三个指针,分别指向当前遍历到的节点、它的前一个节点、后一个节点。 接着试着找到反转后的头节点。代码实现:...原创 2019-08-27 23:07:51 · 105 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(25)合并两个排序链表-Java实现
题目25:合并两各排序链表题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。解题思路:容易犯的两种错:1、写代码之前可以想清楚合并的过程;2、代码在鲁棒性上存在问题 合并从两个链表的头节点开始。小的节点放在前面,剩下的链表任然是排序的,因此合并步骤是一样的 需要对空链表单独处理(链表1或者链表2为空指针的时候,输出链表2和链表1)...原创 2019-08-29 00:09:14 · 149 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(26)树的子结构-Java实现
题目26:树的子结构题目描述:输入两棵二叉树A和B,判断B是不是A的子结构。题目分析: 1)先对A树进行遍历,找到与B树的根结点值相同的结点R; 2)判断A树中以R为根结点的子树是否包含B树一样的结构。代码实现:class TreeNode{ double val; TreeNode left = null; ...原创 2019-08-30 08:06:18 · 190 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(27) 二叉树的镜像-Java实现
第四章 解决问题的思路画图让抽象问题形象化题目27 二叉树的镜像题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。解题思路:树的根节点相同,但它们的左右两个子节点交换了位置,交换了根节点后,还需要交换左右子节点1、先前序遍历这颗树的每个节点,2、如果遍历到的节点有子节点,就交换它的两个子节点。3、当交换万所有非子结点的左右字数后,就得到树的镜像代...原创 2019-08-30 23:04:58 · 96 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(28) 对称二叉树-Java实现
题目28:对称二叉树题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。解题思路:遍历过程中考虑空二叉树二叉树的前序遍历与对称前序遍历相同则是对称的代码实现 public boolean isSymmetrical(TreeNode root) { return isSymmetrical(root,root);...原创 2019-08-31 08:16:23 · 94 阅读 · 0 评论 -
Java数据结构与算法之哈希表-Hash
一、本节重点哈希化简介 开放地址法 链地址法 哈希函数 哈希化的效率 哈希化和外部存储二、简介哈希表是一种数据结构,它可以提供快速的插入操作和查找操作:插入和删除只需要接近常量的时间即O(1)的时间缺点:基于数组,数据创建后难于扩展,某些哈希表被基本填满时,性能下降非常严重;没有一种简便的方法可以以任何一种顺序(从小到大)遍历表中数据项,如果需要这种能力需要其他的数据结...2019-09-04 20:15:02 · 193 阅读 · 0 评论 -
Java数据结构与算法之堆&堆排序-Heap&HeapSort
前言优先级队列是一种对最大(最小)关键字的数据提供便利访问的数据结构。可用于计算机中的人物调度,在计算机中某些程序和活动需要比其他的程序和活动优先执行,因此需要分配更高的优先级。优先级队列是一种抽象数据类型(ADT),它提供了删除最大(或最小)关键字值的数据项的方法,插入数据项的方法,优先级队列可以用有序数组来实现,这种实现方式尽管删除最大数据项的时间复杂度为O(1),但是插入还是需要...原创 2019-09-15 17:34:51 · 261 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(29) 顺时针打印数组-Java实现
题目29:顺时针打印数组题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。题目分析:利用图形思考,得出循环条件是columns>start*2并且rows>startY*2代码实现:package swordToOffer;public class Num29_PrintMartixClockwise { //输入一个矩阵,按照从...原创 2019-09-29 10:15:57 · 129 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(21)调整数组顺序使奇数位于偶数前面-Java实现
题目21调整数组顺序使奇数位于偶数前面题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路:不考虑时间复杂度,最简单的思路是从头到尾扫描数组,每碰到一个偶数拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪动后数组末尾存在一个空位。这个时候把该偶数放入这个空位,由于碰到一个偶数需要移动O(...原创 2019-08-25 22:52:21 · 238 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(13)剪绳子-Java实现
动态规划与贪婪算法动态规划是现在 编程面试的热门话题,如果面试题是求一个问题的最优解(最大值或者最小值),而且该问题呢广告分解成若干个子问题,并且子问题之间还有重叠的子问题,就可以考虑动态规划。应用动态规划需要能够把大问题分解成小问题,分解的小问题也存在最优解。把小问题的最优解组合起来就能到的问题的最优解。求各个子问题的最优解是第一特点 整体的最优解依赖于子问题的最优解是第二特点 ...原创 2019-08-20 21:03:11 · 119 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(12)机器人的运动范围-Java实现
题目12:机器人的运动范围题目描述:地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但它不能进入方格(35, 38),因为3+5+3+8=19。请问该机器人能够到达多少个格子?题目分析:本题11...原创 2019-08-20 16:30:57 · 110 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(4)替换空格-Java实现
处理字符串的问题题目4:替换空格题目描述:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。算法思想:1、如果 从前往后,每次扫描到一个空格,替换为%20的话,那么每次替换后数组都要往后移位(O(n^2));2、先遍历一次数组,统计出字符串中的空格总数,每替换一个空格,长度增加2,因此...原创 2019-08-19 13:39:38 · 94 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(3)二维数组中的查找-Java实现
题目3:二维数组中的查找题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:首先选取数组中右上角的数字,如果该数字等于要查找的数组, 则查找过程结束; 如果该数字大于要查找的数字,则删除这个数字所在的列; 如果该数字小于要查找的数字,则剔除这个数...原创 2019-08-19 11:28:52 · 78 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(2)不修改数组找出重复的数字-Java实现
题目2-不修改数组找出重复的数字描述:在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},那么对应的输出是重复的数字2或者3。思路:1、使用辅助数组实现上面的功能,但是需要额外的空间O(n),数组下标与数字对应。...原创 2019-08-19 10:31:11 · 162 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(1)找出数组中重复的数字-Java实现
本节是剑指offer的学习记录教程第一题题目1:找出数组中重复的数字描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。思路:可以利用哈希表+重新排布数组...原创 2019-08-19 09:45:30 · 210 阅读 · 0 评论 -
数据结构与算法之常用排序算法-Java JavaScript实现
排序算法在一些算法 思想中会经常使用到下面就对一些常用的排序算法做一个记录,常见的排序算法可以分为:0 排序基础知识0.1 排序分类比较类排序:通过比较来决定元素的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来确定元素的次序,可以突破基于比较的时间下界,时间是线性的。因此也叫线性时间非比较排序0.2 时间空间...原创 2019-08-19 00:00:31 · 183 阅读 · 0 评论 -
ArrayList和LinkedList的区别
在学习一些基础数据结构的过程中看到了ArrayList和LinkedList在不同操作中的区别,同时翻阅了一些技术博客后,感觉对于日常有需要的场合有必要进行记录,特转载如下,感谢原作者,从数据的增加和删除、遍历等操作中,由于链表和数据的结构差异,因此有不同,同时对于性能测试上的结果也有了更深入的认识:ArrayList和Vector使用了数组的实现,可以认为ArrayList或者Vector封...转载 2019-06-15 19:30:19 · 128 阅读 · 0 评论 -
10道 Java泛型 T知识
本文转载自腾讯云: 10道java面试题1. Java中的泛型是什么 ? 使用泛型的好处是什么? 这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中。那些拥有Java1.4或更早版本的开发背景的人都知道,在集合中存储对象并在使用前进行类型转换是多么的不方便。泛型防止了那种情况的发生。它提供了编译期的类型安全,确保你只能把正确类型的对象放入集合中,避...转载 2019-04-02 21:43:10 · 88 阅读 · 0 评论 -
设计模式六大原则
OO的六大原则:SRP、OCP、LSP、DIP、ISPOO的五大原则是指SRP、OCP、LSP、DIP、ISP。SRP -- (Single Responsibility Principle 单一职责原则)OCP——开闭原则(Closed for Modification; Open for Extension)现将近期整理的文档提供给大家,这里对LSP做重点的介绍,望...转载 2019-03-30 18:56:57 · 99 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(5)从头到尾打印链表-Java实现
题目6:从头带我打印链表题目描述:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。节点如下定义:解题思路:遍历是从头到尾,但是输出是从尾到头,也就是第一个遍历的节点最后输出,最后一个节点第一个输出,典型的“后进先出-LIFO“,可以用栈实现这种顺序。每经过一个节点的时候,把该节点放到一个栈中,当遍历完整个链表后,再从栈顶输出每个节点的值。代码如下: public ...原创 2019-08-19 14:59:13 · 118 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(6)重建二叉树-Java实现
题目6:重建二叉树题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5, 3, 8, 6},则重建出其二叉树并输出它的头结点。解题思路:在二叉树的前序遍历序列中, 第一个数字总是树的根节点的值,在中序遍历...原创 2019-08-19 16:04:24 · 83 阅读 · 0 评论 -
数据结构算法之-递归
在看了数据结构与算法后,很重要的一步就是不断地刷题理解这些数据结构,但是一遇到递归的时候,就会感觉力不从心。在网上看了一些教程后,由于天资愚钝,还是不太理解,因此想写一个博客记录一下这个过程。在网上看到的解决递归的问题一般是分三步走:递归的终止条件:何时停止递归调用 本次递归要做什么:递归需要实现什么功能 返回值是什么:返回什么内容不知道有没有和我一样的纠结每次递归调用结果的,可能我...原创 2019-08-11 20:18:38 · 225 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(11)矩阵中的路径-Java实现
回溯法:可以看做蛮力法的升级版,他从解决问的每一步所有可能系统的选择一个可行的方法,回溯法适合多个步骤组成的问题,并且每个步骤有多个选项,当我们在某一步选择了其中一个选项 时,就进入下一步,然后又面临新的选择,如此重复,直到达到最终状态。回溯法可能解决问题的可能可以用树状结构表示。题目11:矩阵中的路径题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字...原创 2019-08-20 15:20:43 · 90 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(10)旋转数组的最小数字-Java实现
查找和排序查找和排序在程序设计中经常用到,如果遇到在排序数组或者(部分排序数组)中查找一个数字 或者统计某个数字出现的次数,那么可以尝试二分查找。哈希表主要优点能够在O(1)的时间内找到某一元素;排序较查找复杂一些,常用的排序算法总结,可以查看我的另一篇 数据结构与算法之常用排序算法-Java JavaScript实现题目11:旋转数组的最小数字题目描述:把一个数组最开始的...原创 2019-08-20 13:44:55 · 114 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(19)正则表达式匹配-Java实现
题目19:正则表达式匹配题目描述:请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"及"ab*a"均不匹配。解题思路:每次从字符串中拿出一个字符和模式中的字符去匹配,...原创 2019-08-23 22:21:02 · 122 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(9)斐波那契数列(Fibonacci)-青蛙跳台问题-Java实现
递归与循环在函数求解中会经常使用,但是各自有各自的优缺点递归:代码小,但是不优化的话时间空间占用较大题目9:斐波那契数列问题描述:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。解题思路:常规解法,按照递推公式,f(n) = f(n-1)+f(n-2)实现递归,但是会出现就很多重复计算节点; 实用解法:将计算的的结果保存下来,下次计算时调用即可; ...原创 2019-08-20 10:38:05 · 182 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(8)用两个栈实现队列-Java实现
栈是常见的数据结构,比如说操作系统会给每个线程创建一个栈用来存储函数调用时的各个函数的参数,返回地址及临时变量;栈的特点是先进后出(FILO),栈不考虑排序,需要O(n)找到最大或者最小的数;队列的特点是先进先出,即第一个进入队列的元素将会第一个出来。题目8:用两个栈实现队列题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHe...原创 2019-08-20 08:56:28 · 119 阅读 · 0 评论 -
Java数据结构与算法之图-图-最小生成树-拓扑排序
本节参考《Java数据结构与算法》 第二版本节主要内容:图介绍 搜索 最小生成树 有向图的拓扑顺序 有向图的连通性1、图介绍图是与树有些类似的数据结构,实际上从数学意义上,树是图的一种,然而在计算机程序设计中,图的应用方式与树不同。图通常有一个固定的形状,这是由物理或者抽象问题决定的。例如:图中节点表示城市,边可以表示城市间的班机路线。另一个更抽象的例子是一个...原创 2019-08-10 16:25:56 · 657 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(7)二叉树的下一个节点-Java实现
题目7 二叉树的下一个节点题目描述: 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。题目分析:若一个节点有右子树,那么它的下一个节点就是它的右子树中最左节点,也就是从右子节点出发一直沿着指向左子节点; 若一个节点没有右子节点,同时它是父节点的左子节点,那么它的下一节点就是父节点; ...原创 2019-08-22 23:46:33 · 103 阅读 · 0 评论