书香水墨

私信 关注
书香水墨
码龄6年

积跬步,行千里。

  • 784,378
    被访问量
  • 819
    原创文章
  • 2,300
    作者排名
  • 295
    粉丝数量
  • 于 2015-05-02 加入CSDN
获得成就
  • 获得376次点赞
  • 内容获得59次评论
  • 获得1,693次收藏
荣誉勋章
兴趣领域
  • #后端
    #架构#Redis#MySQL#Linux#Spring Boot#Java#Spring#C/C++#分布式
TA的专栏
  • PW
    11篇
  • Java
    295篇
  • C/C++
    105篇
  • Linux
    132篇
  • 前端
    156篇
  • 网络
    5篇
  • 数据库
    87篇
  • IDEA
    17篇
  • Git&Maven
    8篇
  • Windows
    2篇
  • Docker
    4篇
  • notes
    2篇
  • English
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Docker安装、配置镜像

一、安装1、卸载已经安装过的Docker(没有装过Docker的机器可以不执行) yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \
原创
27阅读
0评论
0点赞
发布博客于 29 天前

Docker内容聚合

一、docker入门
原创
34阅读
0评论
0点赞
发布博客于 29 天前

Docker在Linux创建一个springboot项目的镜像,并在容器中部署

一、将springboot项目打成jar包二、创建Dockerfile文件新建一个dockerTest目录,将docker-demo-0.0.1-SNAPSHOT.jar拷贝到dockerTest目录下,并在dockerTest目录下创建Dockerfile文件Dockerfile内容如下:FROM openjdk:8MAINTAINER che123LABEL name="docker-demo" version="1.0" author="che123"COPY docker-demo
原创
37阅读
0评论
0点赞
发布博客于 29 天前

Dockerfile文件详解

一、示例FROM openjdk:8MAINTAINER che123LABEL name="docker-demo" version="1.0" author="che123"COPY docker-demo-0.0.1-SNAPSHOT.jar dockerdemo-image.jarCMD ["java","-jar","dockerdemo-image.jar"]二、指令详解指令描述FROM指定定制镜像的集成镜像RUN用于执行后面跟着的命令行命令。有以下
原创
23阅读
0评论
0点赞
发布博客于 29 天前

HTML a标签打开连接的几种方式

一、调转到写界面<a href="/test" target="_blank">跳转打开一个新的界面></a>
原创
109阅读
0评论
0点赞
发布博客于 19 天前

Linux SAR命令

一、1. CPU利用率sar -p (查看全天)sar -u 1 10 (1:每隔一秒,10:写入10次)`输出项详细说明CPUall 表示统计信息为所有 CPU 的平均值。%user显示在用户级别(application)运行使用 CPU 总时间的百分比。%nice显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。%system在核心级别(kernel)运行所使用 CPU 总时间的百分比。%iowait显示用于等待I/O操作占
原创
2阅读
0评论
0点赞
发布博客于 昨天

Linux命令之df、dh

一、df# 查看磁盘空间占用情况df -h一、du# 查看当前文件夹下所有文件大小du -h# 查看指定文件/文件夹大小du -h test.txt# 当前文件夹下所有文件总大小du -sh *
原创
9阅读
0评论
0点赞
发布博客于 昨天

JS判断浏览器是否安装了某个软件

一、JS判断浏览器是否安装了某个软件首先到https://github.com/ismailhabib/custom-protocol-detection/blob/master/protocolcheck.js 下载 protocolCheck.js插件window.protocolCheck("调用本地软件的协议", function() { // 没有安装时的执行函数});...
原创
60阅读
1评论
0点赞
发布博客于 19 天前

AngularJS $parsers、$formatters

一、$parsers、$formatters$parsers的数组中函数会以流水线的形式被一一调用。第一个$parse被调用后在进行第二个$parse调用$formatters返回最终的格式angular.module('form').directive('guacLenientDate', ['$injector', function guacLenientDate($injector) { // Required services var $filter = $inj
原创
2阅读
0评论
0点赞
发布博客于 昨天

JS判断字符串是否为某个字符开始

一、substr() 方法if("123".substr(0, 2) == "12"){ console.log(true);}二、substring() 方法if("123".substring(0, 2) == "12"){ console.log(true);}三、slice()方法if("123".slice(0,2) == "12"){ console.log(true);}四、indexOf() 方法if("123".indexOf("12")
原创
21阅读
0评论
0点赞
发布博客于 19 天前

Js 获取对象属性个数

一、方法一var attributeCount = function(obj) { var count = 0; for(var i in obj) { if(obj.hasOwnProperty(i)) { // 建议加上判断,如果没有扩展对象属性可以不加 count++; } } return count;}var testObj = { name1: "value1", name2: "v
原创
16阅读
0评论
0点赞
发布博客于 19 天前

Js获取操作系统版本 && 获得浏览器版本

一、获取操作系统版本function getOS() { var sUserAgent = navigator.userAgent; var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows"); var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC") || (navigator
原创
36阅读
1评论
0点赞
发布博客于 19 天前

JS去除字符串空格

一、replace正则匹配方法1、去除字符串内所有的空格:str = str.replace(/\s*/g,"");2、去除字符串内两头的空格:str = str.replace(/^\s*|\s*$/g,""); 3、去除字符串内左侧的空格:str = str.replace(/^\s*/,"");4、去除字符串内右侧的空格:str = str.replace(/(\s*$)/g,"");var str = " a b c ";str = str.replace(/\s*/g,"");co
原创
17阅读
0评论
0点赞
发布博客于 19 天前

JS中隐含参数arguments、callee、caller

一、argumentsarguments 该对象代表正在执行的函数和调用它的函数的参数function test() { if(arguments.length > 0) { for(var v of arguments) { console.log(v); } }}test(1, 2, 3);123二、calleecallee属性是 arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名函数的递归或者保证函数的封装
原创
18阅读
0评论
0点赞
发布博客于 19 天前

JS监听浏览器关闭、刷新界面

window.onbeforeunload = function() { return "quite";}
原创
31阅读
0评论
0点赞
发布博客于 19 天前

JS 中forEach,for in、for of的使用

一、forEach1.1 遍历数组var array = [1,2,3,4,5,6];/*** currentValue 当前元素* index 当前元素的索引值* arr 当前元素所属的数组对象**/array.forEach(function(currentValue, index, arr) { console.log("index: " + index + "; currentValue: ", currentValue);});1.2 遍历对象var object =
原创
24阅读
0评论
0点赞
发布博客于 19 天前

angular.copy、angular.extend

一、angular.copyangular.copy用于深复制angular.copy(src,[dst])    src:源对象    dst:目标对象,复制的对象js中 ‘= ’操作符复制的是指针,所以前后两个变量指向的还是内存中的同一个对象,所以在其中一个变量上操作该对象时,对另外一个变量也会生效。而angular.copy方法是深复制,会在内存中再生成一个对象,两个变量彼此独立,互不影响。    接收一个必须参数src,一个可选参数dst。如果dst没有提供,就会创建对象或者数组的复制
原创
1阅读
0评论
0点赞
发布博客于 昨天

AngularJS指令中的transclude

transclude可以设置为false(默认),true或者对象三种值,如果不设该属性就默认为false,也就是说你不需要将该指令所在元素包含的内容嵌入到模板中。一、transclude设置为true当transclude为true的时候,这时指令所在元素包含的内容会被嵌入到模板中有ng-transclude指令的元素中,例如:<hello> <p>hello</p><hello>angular.module("app", [])..
原创
2阅读
0评论
0点赞
发布博客于 昨天

MySql设置服务器接受的数据包大小

一、查看当前值# 先登录mysql执行,单位为字节,1M=1*1024*1024show VARIABLES like '%max_allowed_packet%';1: 方式一可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改。max_allowed_packet = 20M如果找不到my.cnf可以通过mysql --help | grep my.cnf去寻找my.cnf文件。重启mysqlservice m
原创
1阅读
0评论
0点赞
发布博客于 昨天

MySql去重复数据

一、使用distinctdistinct cloumn1, cloumn2 这样的mysql 会认为要过滤掉name和id两个字段都重复的记录;如果sql这样写:select cloumn1, distinct cloumn2 from tablename,这样mysql会报错,因为distinct必须放在要查询字段的开头select distinct cloumn1, cloumn2 from tablename;二、使用group byselect id,name from user g
原创
8阅读
0评论
0点赞
发布博客于 昨天

Mysql错误: ERROR 1205: Lock wait timeout exceeded解决办法

一、解决办法1、执行mysql命令: show full processlist;2、 然后找出查询语句的系统id:kill掉被锁住的线程id3、查看事物表: select * from information_schema.innodb_trx;
原创
8阅读
0评论
0点赞
发布博客于 昨天

CSS中两个class之间有空格和没空格的区别

一、有空格有空格表示后代选择器,选择的是.example内的.children.example .children { color: orange;}<p class="example"> <p class="children">children</p></p>二、没有空格没有空格表示.example.children在一个元素上,该元素必须同时又这两个class才生效.example.children { color: or
原创
37阅读
0评论
0点赞
发布博客于 25 天前

CSS display:flex 布局

一、display:flexdisplay:flex 是一种布局方式。它即可以应用于容器中,也可以应用于行内元素。是W3C提出的一种新的方案,可以简便、完整、响应式地实现各种页面布局。Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。二、flex-directionflex-direction 容器内元素的排列方向(默认横向排列)``1:flex-dir
原创
24阅读
0评论
0点赞
发布博客于 25 天前

CSS box-shadow属性

box-shadow属性可以设置一个或多个下拉阴影的框值说明h-shadow必需的。水平阴影的位置。允许负值v-shadow必需的。垂直阴影的位置。允许负值blur可选。模糊距离spread可选。阴影的大小color可选。阴影的颜色。在CSS颜色值寻找颜色值的完整列表inset可选。从外层的阴影(开始时)改变阴影内侧阴影div { width:300px; height:100px; background-color:yello.
原创
17阅读
0评论
0点赞
发布博客于 25 天前

CSS 垂直居中

一、position: relative.content{ width: 300px height: 300px; background: red;}.children { width: 100px height: 100px; background: orange; position: relative; top: calc(50% - 50px); left: calc(50% - 50px);}<div class="content"> <div ch
原创
16阅读
0评论
0点赞
发布博客于 25 天前

CSS Position(定位)

值描述static默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)relative生成相对定位的元素,相对于其正常位置进行定位fixed生成固定定位的元素,相对于浏览器窗口进行定位absolute生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位sticky粘性定位,该定位基于用户滚动的位置。它的行为就像 position:relative; 而当页面滚动超...
原创
17阅读
0评论
0点赞
发布博客于 25 天前

CSS选择器

一、基本选择器选择器示例示例说明.class.intro选择所有class="intro"的元素#id#firstname 选择所有id="firstname"的元素**选择所有元素elementp选择所有<p>元素element,elementdiv,p选择所有<div>元素和<p>元素element elementdiv p选择<div>元素内的所有<p>元素e
原创
15阅读
0评论
0点赞
发布博客于 25 天前

Linux中执行MySql脚本

1、连接到MySQL数据库 mysql -h127.0.0.1 -uroot -p tableName2、执行sqlsource /user/local/test.sql
原创
4阅读
0评论
0点赞
发布博客于 昨天

Linux根据端口查询pid

一、根据端口号查询pidlsof -i:<port>ornestat -nap | grep <port>二、根据进程号查询端口nestat -nap | grep <pid>三、根据进程pid查看服务ps -ef | grep <pid> #进程信息ll /proc/<pid>/cwd #查看服务器安装路径...
原创
4阅读
0评论
0点赞
发布博客于 昨天

MyBatis传递参数常用方式

一、匿名参数-顺序传递参数必须按照顺序调用,且只能使用 [arg0、arg1]、[param0、param1]方式调用String select(String a, String b);<select id="select" resultTyp='string'> SELECT field FROM table where parma1 = #{param1} and parma2 = #{param2};</select>二、使用@Param注解String
原创
15阅读
0评论
0点赞
发布博客于 19 天前

Java数据结构与算法

一、基本数据结构Java数据结构–顺序表Java数据结构–单链表Java数据结构–循环链表Java数据结构–双链表Java数据结构–顺序栈Java数据结构–链栈Java数据结构–递归Java数据结构–顺序队列Java数据结构–链式队列Java数据结构–循环队列Java数据结构–顺序串Java数据结构–串的堆存储结构Java数据结构–串的链式存储结构Java数据结构–串的模式匹配算法Java数据结构–数组、矩阵、广义表二、树Java数据结构–树Java数据结构–二叉树
原创
141阅读
0评论
0点赞
发布博客于 7 月前

Java数据结构--图

一、图某班级的学生信息表如图1.0.1所示,每个学生都来自不同的城市,如果老师从重庆出差到南京,顺路要选择部分学生做一次家访,怎么样选择才最合理呢?图1.0.2是一个简单的模拟城市路线的地图,从重庆出差到南京,如果选择用时最短的路线出差,同时做家访呢?注:图中黑点代表城市,数字代表往返两城市间所需要的时间(单位:小时)。要解决该问题,最好的方法是使用数据结构中图的知识。1.1 图的概念及基本术语图:图G是由两个集合V和E所限定的一种数据结构,记作G=(V,E),其中V是定点有限非
原创
106阅读
0评论
1点赞
发布博客于 7 月前

Java基本排序算法 -- 推排序

一、推排序
原创
78阅读
0评论
0点赞
发布博客于 7 月前

Netty简单示例

一、
原创
93阅读
0评论
0点赞
发布博客于 7 月前

Java基本排序算法 -- 快速排序

一、快速排序
原创
54阅读
0评论
0点赞
发布博客于 7 月前

Java基本排序算法 -- 基数排序

一、基数排序
原创
46阅读
0评论
0点赞
发布博客于 7 月前

Java基本排序算法 -- 归并排序

一、归并排序
原创
36阅读
0评论
0点赞
发布博客于 7 月前

Java基本排序算法 -- 直接选择排序

一、直接选择排序public class SelectSort { /** 直接选择排序 */ public void selectSort(int[] data) { int i, j, small; int temp; for (i = 0; i < data.length - 1; i++) { small = i; for (j = i+1; j < data.length; j++) { //寻找最小的数据元素 if (data[j] <
原创
98阅读
0评论
0点赞
发布博客于 7 月前

Java基本排序算法 -- 冒泡排序

一、冒泡排序public class ChangeSort { public static void main(String[] args) { ChangeSort.bubbleSort(new int[]{9,8,7,6,5,4,3,2,1,0}); } /** 冒泡排序 */ public static void bubbleSort(int[] data) { int i, j, flag = 1; int temp; for (i = 0; i < data
原创
65阅读
0评论
0点赞
发布博客于 7 月前

Java基本排序算法 -- 二分插入排序

二分插入排序直接插入排序的算法简洁,容易实现,当n较小时时一种好的排序方法。当是一般情况下记录序列中的记录数量都很大,则此时直接插入排序方法就不适用了;而二分插入排序是在直接插入排序基础上改进的一种排序算法。由于插入排序的操作是在一个有序序列中进行比较和插入的,而比较操作实际上就是在有序序列中作查找操作,这个“查找”操作可以用“二分查找”的方法来实现。按照这种思想,对直接插入排序改进后的排序方法称为二分插入排序,又称折半操作排序。与直接插入排序相比,二分插入排序仅仅减少了记录关键字的比较次数,而记录的
原创
63阅读
0评论
0点赞
发布博客于 7 月前

Java基本排序算法 -- 希尔排序

一、希尔排序1.1 算法思想(1)选择一个步长序列t1,t2,…,tk,其中ti > tj, tk = 1;(2)按步长序列个数k,对序列进行k趟排序;(3)每趟排序根据对应的步长ti,将待排序序列分隔成若干长度为m的子序列,分别对各子表进行直接插入排序、仅步长因子为1时,整个序列作为一个表来处理,表长度即为整个序列的长度;示例使用希尔排序数组:public class InsertSort { /** * 希尔排序 */ public void shellSor
原创
54阅读
0评论
0点赞
发布博客于 7 月前

Java基本排序算法 -- 直接插入排序

一、插入排序1.1 基本思想假设待排序的记录存放在数组r[1…n]中,任何一个待排序的记录序列初始状态可以看成是这种情况:初始时r[1]自成1个有序区,无序区为r[2…n],如图9.2所示。直接插入排序是一种最简单的排序方法,它的基本思想是:仅有一个记录的表,总是有序的,因此,对n个记录的表,可以从第二个记录开始直到第n个记录,逐个向有序表中进行插入操作,从而得到n个记录按关键字有序的表。示例:使用直接插入排序数组A={16, 15, 19, 16, 18, 19, 20, 14}将
原创
47阅读
0评论
0点赞
发布博客于 7 月前

Java基本查找算法 -- 哈希表的查找

一、哈希表的查找前面讨论的线性表和树表的查找中,表中的相对位置是随机的,也就是是说,记录在表中的位置跟记录的关键字之间不存在确定关系。因此,在这些表中查找记录时需要进行一系列的关键字比较。这一类查找方法是建立在“比较”的基础上的。在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和表中一个唯一的存储位置相对应,称这个对应关系f为哈希(散列)函数,根据这个思的表称为哈希表。在哈希表中,若出现key1≠key2,而f(key1)=f(key2),则这种现象称为地址冲突key1和k
原创
391阅读
0评论
0点赞
发布博客于 7 月前

Java基本查找算法 -- 树的查找

一、树表查找的对象是以二又树或树作为表的组织形式。树表在进行插入或删除操作时,可以方便地维护表的有序性,不需要移动表中的记录,从而减少因移动记录引起的额外时间开销。常见的树表有二叉树、平衡二叉树、B-树和B+树等。下面将以二叉排序树作为实例进行讲解。二叉排序树(简称BST)的定义:二叉排序树或者是空树,或者是满足如下性质实例的二叉树:(1)若它的左子树非空,则左子树上所有记录的值均小于根记录的值(2)若它的右子树非空,则右子树上所有记录的值均大于跟记录的值。(3)它的左、右子树分别也是二叉
原创
170阅读
0评论
0点赞
发布博客于 7 月前

Java基本查找算法--分块查找

一、分块查找分块查找又称为索引查找,他是一种性能介于顺序查找和二分查找之间的查找方法。它要求按如下的索引方式来存储线性表:将R[0…n-1]均分为b块,前b-1块中的记录个数为s=n/b,最后一块即第b块的记录小于等于s;每块中的关键字不一定有序,但前一块中的最大关键字必须小于后一块的最小关键字,即要求表示“分块有序”的;抽取各块中的最大关键字及其起始位置构成一个索引表IDX[0…b-1],即IDX[i](0<=i<=b)中存放着第i块的最大关键字及该块在表R中的起始位置。由于表R是分块有序
原创
230阅读
0评论
1点赞
发布博客于 7 月前

Java基本查找算法--二分查找

一、
原创
50阅读
0评论
0点赞
发布博客于 7 月前

Java基本查找算法--顺序查找

一、查找
原创
82阅读
0评论
0点赞
发布博客于 7 月前

Java数据结构--树、森林和二叉树

一、树、森林和二叉树之间的转换树或森林与二叉树之间存在一一对应的关系。任何一棵树或一个森林可唯一地对应到一棵二叉树;反之,任何一棵二叉树也能唯一地对应到一个森林或一棵树。2.1 将树转化为二叉树树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟。按照这种关系很自然地就能将树转换成相应的二叉树,具体步骤是:1)在所有兄弟结点之间加一连线;2)对每个结点,除了保留与其长子的连线外,去掉该结点与其他孩子的连线。示例:将图2.1.1所示的树转换为二叉树。根据树转二叉树的规则:第一
原创
93阅读
0评论
0点赞
发布博客于 7 月前

Java数据结构--哈夫曼树

一、哈夫曼树概述路径:若在树中存在一个结点序列k1,k2, …, kj,使得ki是ki+1的双亲(1 ≤ i ≤ j),则此结点序列称为k1到kj的路径。路径的长度:从k1到kj所经过的分支树称为这两点之间的路径长度,它等于路径上的结点数减1。结点的权:在许多应用中,常常将树中的某个结点赋上一个具有某种意义的数值,这个和某个结点相关的数值称为该结点的权或权值。结点的带权路径长度:值从树根到该结点之间的路径长度与结点的权值得乘积。树的带权路径长度:值树中所有叶子结点的带权路径长度之和,通常记为WP
原创
79阅读
0评论
0点赞
发布博客于 7 月前

Java数据结构--线索二叉树

一、线索二叉树的概念在二叉树的链式存储结构中,增加指向前趋和后续结点的信息,称为线索。加上线索的二叉树称为线索二叉树。对二叉树以某种次序进行遍历使其成为线索二叉树的过程称为线索化。二、线索化二叉树在由n个结点构成的二叉树链式存储结构中,存在着n+1个空链域。可以利用这些空链域建立起来相应结点的前趋结点信息和后续结点信息 。在二叉树中,如果某结点有左子树,则其lChind域指向其左孩子,否则其lChild域指向该结点在遍历序序列中的前趋结点;如果其结点有右子树,则其rChild域指向其右孩子,否则
原创
67阅读
0评论
0点赞
发布博客于 7 月前

Java数据结构--二叉树

一、二叉树的概念二叉树是结点的有限结合,这个集合或者为空或者是由一个跟结点和两棵互不相交的分别称为左子树和右子树的二叉树组成。二叉树中的每个结点至多有两棵子树,且子树有左右之分,次序不能颠倒。二叉树是一种重要的树型结构,但是二叉树不是树的特例。二叉树的5种形态分别为:空二叉树、只有根结点的二叉树、根结点和左子树、根结点和右子树、根结点和左子树。二叉树与树的区别:二叉树中米格结点的孩子至多不能超过两个,而树对结点的孩子树无限制;另外,二叉树中结点的子树有左右之分,而树的子树没有次序。思考一颗度为2的树
原创
636阅读
0评论
0点赞
发布博客于 7 月前

Java数据结构--树

一、树的概念xxx班的学生信息表如图1.1所示,其中学生别分到了不同的学习小组,第一组组长是李华,组员有王丽、张阳、赵斌;第二组组长是孙琪,组员有马丹;第三组组长是刘畅,组员有周天、黄凯。这些信息构成了一颗树,如图1.2所示。这就是一种典型的数据结构–树。要实现学生组员的插入、删除、查找等操作,就要用到树的相关知识。1.1 树的概念树是零个或多个结点的有限集合。结点树为0的数称为空树,结点树大于0的数称为非空树。在一颗树中:1)有且仅有一个特定的称为跟的结点。2)当结点数大于1时,
原创
110阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--数组、矩阵、广义表

一、简介1.1 数组的概念是n(n ≥ 1)个相同数据类型的数据元素a0,a1,…,an-1构成的占用一块联系地址的内存单元的有限集合。1.2 特点(1)数组中数据元素的数据类型相同;(2)数组是一种随机存取结构,只要给定一组下标,就可以访问与其对应的数组元素;(3)数组中数据元素的个数是固定的;1.3 数组的存储在计算机中,表示数组最普通的方式时采用一组连续的存储单元顺序地存放数组元素。由于内存是一维的,而数组是多维结构,我们可以认为二维数组是一个每个数据元素是一维数组的一维数组
原创
112阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--串的模式匹配算法

一、Brute-Force模式匹配算法public class BruteForce { /** * Brute-Force(暴风算法) * 算法思想: * 从目标串s的第一个字符起和模式串t的第一个字符进行比较,若相等,则继续逐个比较后续字符, * 否则从s串的第二个字符起再重新和串t进行比较。以此类推,直至串t中每个字符依次和串s的一 * 个连续的字符序列相等,则称为模式匹配成功,此时串t的第一个字符在串s中的位置就是t在s中 * 的位置,否则模式匹配不成功 *
原创
102阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--串的链式存储结构

一、简介1.1 串的概念串是一种特殊的线性表,其特殊性体现在数据元素时一个字符。串(或字符串)是由零个或多个字符串组成的有限序列。表示方法:S=“a1a2…an”其中:S是串名,双引号括起来的字符序列是串值;ai(1 <= i <= n)可以是字母、数字或其他字符;n为串的长度。将串值引起来的双引号本身不属于串,它的作用是避免串与常数或标识符混淆。长度为零的串称为空串,它不包含任意字符。通常将仅由一个或多个空格组成的串称为空白串。串中任意个连续字符组成的子序列称为该串的子串,
原创
168阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--串的堆存储结构

一、简介1.1 串的概念串是一种特殊的线性表,其特殊性体现在数据元素时一个字符。串(或字符串)是由零个或多个字符串组成的有限序列。表示方法:S=“a1a2…an”其中:S是串名,双引号括起来的字符序列是串值;ai(1 <= i <= n)可以是字母、数字或其他字符;n为串的长度。将串值引起来的双引号本身不属于串,它的作用是避免串与常数或标识符混淆。长度为零的串称为空串,它不包含任意字符。通常将仅由一个或多个空格组成的串称为空白串。串中任意个连续字符组成的子序列称为该串的子串,
原创
133阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--顺序串

一、简介1.1 串的概念串是一种特殊的线性表,其特殊性体现在数据元素时一个字符。串(或字符串)是由零个或多个字符串组成的有限序列。表示方法:S=“a1a2…an”其中:S是串名,双引号括起来的字符序列是串值;ai(1 <= i <= n)可以是字母、数字或其他字符;n为串的长度。将串值引起来的双引号本身不属于串,它的作用是避免串与常数或标识符混淆。长度为零的串称为空串,它不包含任意字符。通常将仅由一个或多个空格组成的串称为空白串。串中任意个连续字符组成的子序列称为该串的子串,
原创
240阅读
0评论
1点赞
发布博客于 8 月前

Java数据结构--循环队列

一、简介1.1 概念队列简称队–他同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除;在队列中把插入数据元素的一端称为队尾,删除数据元素的一端称为队头;向队尾插入元素称为进队和入队,新元素入队后成为新的队尾元素;从队列中删除元素称为离队或出队,元素出队后,其后续元素成为新的队头元素;由于队列的插入和删除操作分别在队尾和队头进行,每个元素必然按照进入的次序离队,也就是说先进队的元素必然先离队,所以称队列为先进先出表。循环队列:将数组的最后一个元素的
原创
59阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--顺序队列

一、简介1.1 概念队列简称队–他同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除;在队列中把插入数据元素的一端称为队尾,删除数据元素的一端称为队头;向队尾插入元素称为进队和入队,新元素入队后成为新的队尾元素;从队列中删除元素称为离队或出队,元素出队后,其后续元素成为新的队头元素;由于队列的插入和删除操作分别在队尾和队头进行,每个元素必然按照进入的次序离队,也就是说先进队的元素必然先离队,所以称队列为先进先出表。顺序队列–利用顺序存储方式实现的
原创
65阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--链式队列

一、简介1.1 概念队列简称队–他同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除;在队列中把插入数据元素的一端称为队尾,删除数据元素的一端称为队头;向队尾插入元素称为进队和入队,新元素入队后成为新的队尾元素;从队列中删除元素称为离队或出队,元素出队后,其后续元素成为新的队头元素;由于队列的插入和删除操作分别在队尾和队头进行,每个元素必然按照进入的次序离队,也就是说先进队的元素必然先离队,所以称队列为先进先出表。链式队列–1.2 结构图
原创
72阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--递归

一、简介递归–是指在定义自身的同时又出现了对自身的引用;如果一个算法直接或者间接地调用自己,则称这个算法是一个递归算法;任何一个又意义的递归算法总是有两部分组成:递归调用与递归终止条件二、示例public class Fac { /** * 求n! * * @param n * @return */ public static long fac(int n) { if(n == 0) { return 1; } else { return n*f
原创
43阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--链栈

一、简介1.1 概念栈:又称为堆栈,是限制在表的一端进行插入和删除的线性表。其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。表中进行插入、删除操作的一端称为栈顶、栈顶保存的元素称为栈顶元素。相对的,表的另一端称为栈底。当栈中没有数据元素时,称为空栈;向一个栈中插入元素又称为进栈或入栈;从一个栈中删除元素又称为出栈或退栈。由于栈的插入和删除操作都仅在栈顶进行,后进栈的元素必定先出栈,所以又把堆栈称为后进先出表。链栈--用链式存储结构实现的栈称为链栈;
原创
81阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--顺序栈

一、简介1.1 概念栈:又称为堆栈,是限制在表的一端进行插入和删除的线性表。其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。表中进行插入、删除操作的一端称为栈顶、栈顶保存的元素称为栈顶元素。相对的,表的另一端称为栈底。当栈中没有数据元素时,称为空栈;向一个栈中插入元素又称为进栈或入栈;从一个栈中删除元素又称为出栈或退栈。由于栈的插入和删除操作都仅在栈顶进行,后进栈的元素必定先出栈,所以又把堆栈称为后进先出表。顺序栈:由于栈是运输受限的线性表,除了操
原创
46阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--双链表

一、简介1.1 概念双链表的每个结点中都有两个指针,分别指向直接后续和直接前驱。1.2 优点插入、删除时,只要找到对应前驱结点,修改指针即可,无需移动元素;采用动态存储分配,不会造成内存浪费和溢出。1.3 缺点在有些高级语言中, 不支持指针,不容易实现;需要用额外空间存储线性表的关系,存储密度小;不 能随机访问,查找时要从头指针开始遍历,查找元素的时间复杂度较大。1.4 结构图二、简单实现public class DoubleLinkedList<E>
原创
76阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--循环链表

一、简介1.1 概念对于单链表而言,最后一个结点的地址为空,如果表示最后一个结点的指针域指向头结点,整个链表形成一个环,就构成了单循环链表。与单链表相比,只是将原来判断指针是否为空变为判断是否是头指针,没有其他的变化。访问单循环链表某一结点,可以从任何一个结点开始,顺序向后遍历到达要访问的结点。1.2 优点插入、删除时,只要找到对应前驱结点,修改指针即可,无需移动元素;采用动态存储分配,不会造成内存浪费和溢出。1.3 缺点在有些高级语言中, 不支持指针,不容易实现;需要用额外空
原创
67阅读
0评论
0点赞
发布博客于 8 月前

Java数据结构--单链表

一、简介1.1 概念二、
原创
104阅读
1评论
0点赞
发布博客于 8 月前

Java数据结构--顺序表

一、顺序表1.1 概念顺序表示是指按顺序存储结构存储的线性表,顺序存储表中的结点在内存中占用一段连续的存储单元。即线性表中逻辑相邻的元素在内存中存储位置相邻。1.2 优点方法简单,各种高级语言中都有数组,容易实现;不用为表示结点间的逻辑关系而增加额外的存储开销,存储密度大顺序表具有按元素序号随机访问的特点,查找速度快,时间复杂度较小1.3 缺点在顺序表中进行插入、删除操作时,平均移动大约表中一半的元素,因此n较大的顺序表执行效率低需要预先分配适当的存储空间,预先分配过大,可
原创
94阅读
0评论
1点赞
发布博客于 8 月前

Linux wc命令

一、wc命令Linux wc命令用于计算字数。利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。1.1 参数选项描述-c或–bytes或–chars只显示Bytes数。-l或–lines只显示行数。-w或–words只显示字数。–help在线帮助。–version显示版本信息。1.2 示例wc testfile # test
原创
214阅读
0评论
0点赞
发布博客于 8 月前

Java Swing JDialog

一、JDialogJDialog是Swing另一个顶级窗口,JDialog对话框可分为两种:模态对话框和非模态对话框,所谓模态对话框是指用户需要等到处理完对话框后才能和其他窗口继续交流,而非模态对话框允许用户在处理对话框的同时与其他对话框进行交流,对话框是模态或非模态可以在创建JDialog对象时为构造方法传入参数而设置,也可以创建之后通过他的setModal()方法来进行设置,JDialog常见方法如下JDialog(Frame owner) 用来创建一个非模态的对话框,owner为对话框所有者J
原创
121阅读
0评论
0点赞
发布博客于 9 月前

Java 使用 Ganymed SSH-2 连接 Linux

一、引入jar包(基于Maven项目)<dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>build210</version></depende...
原创
263阅读
0评论
0点赞
发布博客于 10 月前

十 一、C语言创建桌面程序:单选按钮、复选框和分组框控件

一、创建按钮单选按钮和复选框都是一种特殊的按钮,窗口类名称都是button,只不过增加了一些特殊的窗口样式罢了。单选按钮的样式为BS_AUTORADIOBUTTON,复选框的样式为BS_AUTOCHECKBOX。例如://创建一个单选按钮CreateWindow( TEXT("button"), TEXT("单选按钮"), WS_CHILD | WS_VISIBLE | ...
原创
411阅读
0评论
0点赞
发布博客于 10 月前

十、C语言创建桌面程序:背景颜色和文字颜色

一、设置控件背景颜色当 static 控件或具有 ES_READONLY 风格的 edit 控件被绘制时,会向父窗口发送 WM_CTLCOLORSTATIC 消息。如果我们在窗口过程中处理该消息,就必须返回一个画刷句柄,Windows 会使用该画刷来绘制控件背景(子窗口背景)。也就是说,改变 static 控件的背景颜色只有这一种方式,就是处理 WM_CTLCOLORSTATIC 消息。WM...
原创
172阅读
0评论
0点赞
发布博客于 10 月前

九、C语言创建桌面程序:编辑框控件

一、编辑框控件的窗口类名是edit。除了子窗口常用的风格 WS_CHILD、WS_VISIBLE、WS_BORDER 外,edit 控件也有自己的风格,都是以ES开头。风格说明ES_AUTOHSCROLL当输入文字超出横向显示范围时自动滚动(一般必选)。ES_AUTOVSCROLL当输入文字超出纵向显示范围时自动滚动。ES_CENTER文本居中对齐。...
原创
236阅读
0评论
0点赞
发布博客于 10 月前

八、C语言创建桌面程序:按钮控件

一、按钮控件按钮既是标准控件,也是子窗口,窗口类名是button。Button 控件样式以BS开头,常用的有:样式说明BS_LEFT文本居左。BS_RIGHT文本居右。BS_CENTER文本水平居中(默认为 BS_CENTER)。BS_BOTTOM文本位于按钮底部。BS_TOP文本位于按钮顶部。BS_VCENTER文本垂直居中...
原创
491阅读
0评论
1点赞
发布博客于 10 月前

七、C语言创建桌面程序:CreateFont创建自己的字体

一、 CreateFont 函数创建字体使用 CreateFont 函数,它的原型是:HFONT CreateFont( int cHeight, //字体的逻辑高度 int cWidth, //字体的逻辑宽度 int cEscapement, //指定移位向量相对X轴的偏转角度 int cOrientation, //指定字符基线相对X轴的偏转角度...
原创
299阅读
0评论
0点赞
发布博客于 10 月前

六、C语言创建桌面程序:Static控件(静态文本框控件)

一、创建文本控件使用 TextOut 和 DrawText 函数有时候会不方便,例如:文本不能自动换行,超出窗口范围会被隐藏;每次更改文本都要先擦除背景再重新输出,比较麻烦。实际开发中一般使用静态文本框控件来输出文本。静态文本框是Windows 的一种标准控件,可以用来在窗口上显示一段文本,并且文本容易受到控制。除了静态文本框,Windows的标准控件还有很多种,例如按钮、下拉菜...
原创
148阅读
0评论
0点赞
发布博客于 10 月前

五、C语言创建桌面程序:画笔和画刷

一、画笔画刷的概念画笔和画刷都用来在画布上绘图。画布就是用来绘画的一块背景,可以有颜色也可以没有,也可以有图案(比如条纹、网格等);画布可以理解为我们平时作图时使用的纸。画笔用来画线,可以是封闭的也可以是开放的,比如直线、曲线、圆形、矩形等。画刷用来填充背景或者一块区域,一般带颜色或图案。比如画一个矩形,需要先找一块画布,然后用画笔画出矩形的轮廓(线条),再用画刷给矩形区域喷涂上颜色。...
原创
218阅读
1评论
0点赞
发布博客于 10 月前

四、C语言创建桌面程序:绘制图形

一、绘制矩形1.1 绘制矩形:Rectangle 函数Rectangle 函数可以在窗口上绘制一个矩形,它的原型为:BOOL Rectangle( HDC hdc, //设备环境句柄 int nLeftRect, //矩形左上角x坐标 int nTopRect, //矩形左上角y坐标 int nRightRect, //矩形右下角x坐标 i...
原创
336阅读
0评论
0点赞
发布博客于 10 月前

三、C语言创建桌面程序:文字的输出 TextOut 和 DrawText

一、BeginPaint 和 EndPaint 函数当发生 WM_PAINT事件时,应用程序开始绘图。绘图之前需要先调用 BeginPaint 函数通知 Windows,告诉它当前程序需要使用显示器,你安排一下吧。BeginPaint 函数执行完毕就返回设备环境句柄,接下来就可以使用 GDI函数绘图了。绘图结束后,也需要调用 EndPaint 函数通知Windows,告诉它绘图结束了,你可以...
原创
544阅读
0评论
0点赞
发布博客于 10 月前

二、C语言创建桌面:Hello World!

一、示例#include <windows.h>/** * 处理窗口事件的函数 * @return */LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine...
原创
117阅读
0评论
0点赞
发布博客于 10 月前

一、C语言创建桌面程序: 第一个桌面程序

一、示例代码#include <windows.h>#include <tchar.h>static TCHAR szWindowClass[] = _T("win32app");static TCHAR szTitle[] = _T("Win32 Guided Tour Application");LRESULT CALLBACK WndProc(HWND,...
原创
550阅读
0评论
1点赞
发布博客于 1 年前

js调用本地exe文件

一、创建pw.reg文件并执行执行时需要去掉注释 //Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\PW] //PW 协议名称@="PW Protocol" //PW 协议路径"URL Protocol"=""[HKEY_CLASSES_ROOT\PW\DefaultIcon] //PW 协议名称@="H:\\P...
原创
124阅读
0评论
0点赞
发布博客于 1 年前

JavaScript 操作剪贴板

一、剪切板相关事件事件描述copy在发生复制操作时触发cut在发生剪切操作时触发paste在发生粘贴操作时触发beforecopy在发生复制操作前触发beforeecut在发生剪切操作前触发二、剪切板工具类var EventUtil = { // 添加事件 addHandler: function (element, typ...
原创
100阅读
0评论
0点赞
发布博客于 1 年前

Java遍历指定目录下的所有文件

public class FileUtil{ /** * 遍历指定目录下的所有文件,不包括目录中的文件 */ public static void files(File file) { File[] fs = file.listFiles(); for(File f:fs){ if(!f.isDirectory()) System.out.println(...
原创
164阅读
0评论
0点赞
发布博客于 1 年前

Java 实现RSA加密、解密、签名、验签

import java.io.ByteArrayOutputStream;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.Public...
原创
152阅读
0评论
0点赞
发布博客于 1 年前

Java常用加密算法

一、Base64Base64用于网络中传输的数据进行编码,严格意义上属于编码的格式,有64个字符的对应的编码,Base64就是将内容按照该格式进行编码。可以对数据编码和解码,是可逆的,安全度较低,不过,也可以作为最基础最简单的加密算法用于加密要求较弱的情况。Base64可以使用JDk中自带的类实现,还可以使用Bouncy Castle(简称bc)或Commons Codec(简称cc)实现。...
原创
147阅读
1评论
0点赞
发布博客于 1 年前

Java 并发编程Thread类常用方法

一、Thread方法描述void join()等待该线程死亡。void start()使该线程开始执行;Java虚拟机将调用run此线程的方法。static void yield()向调度程序提示当前线程愿意放弃当前使用的处理器。void interrupt()中断此线程。static boolean interrupted()测试当前线程是...
原创
59阅读
0评论
0点赞
发布博客于 1 年前

Java 并发编程之原子类

一、原子类原子类包装了一个变量,然后提供对这个变量的原子操作的方法。原子类中对变量的操作,都是原子操作。原子类用来把变量的操作封装成原子操作,也就是保证了原子性。当你的代码保证了有序性和可见性时,可以使用原子类来保证原子性,从而避免synchronized带来的高性能开销。二、分类1)基本原子类AtomicBoolean:布尔型AtomicInteger:整型AtomicL...
原创
47阅读
0评论
0点赞
发布博客于 1 年前

Java 中的CAS

一、CAS       CAS 就是 Compare and Swap (比较并操作) 的意思。很多的 CPU 直接支持 CAS 指令。CAS 是一项乐观锁技术,当多个线程尝试使用 CAS 同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试...
原创
60阅读
0评论
0点赞
发布博客于 1 年前

Java javax.xml.ws.Holder类

https://www.zifangsky.cn/734.html一、Java中参数的传递方式从下面的示例可以看出:Java的参数传递只是传值。public class Test { public static void main(String[] args) throws Exception { String s = "你好"; change(...
原创
317阅读
0评论
0点赞
发布博客于 1 年前

Java 并发编程wait、notify、notifyAll 与 Condition

一、wait、notify、notifyAll1.1 方法简介1)调用某个对象的wait()方法,相当于让当前线程交出此对象的锁,然后进入等待状态,等待后续再次获得此对象的锁(Thread类中的sleep方法使当前线程暂停执行一段时间,从而让其他线程有机会继续执行,但它并不释放对象锁)。如果调用某个对象的wait()方法,当前线程必须拥有这个对象的锁,因此调用wait()方法必须在同步块或者...
原创
130阅读
0评论
0点赞
发布博客于 1 年前

Java 并发编程ReentrantLock

一、ReentrantLock除了使用关键字synchronized来实现内置锁外,还可以使用ReentrantLock。虽然在性能上ReentrantLock和synchronized没有什么区别,但是ReentrantLock并不是一种替代内置加锁的方法,而是当内置加锁机制不适用时,作为一种可选的改机功能。但ReentrantLock相比synchronized而言功能更加丰富,使用起来更...
原创
41阅读
0评论
0点赞
发布博客于 1 年前

Java 并发编程ReadWriteLock

一、ReadWriteLockReadWriteLock 有一个实现类 ReentrantReadWriteLock 可以用来创建读写锁。在学习之前可以先学习一下ReentrantLock。ReadWriteLock特性:支持公平锁与非公平锁;可重入;支持锁降级(写锁 -> 读锁),写锁降级成读锁,并不会自动释放当前线程获取的写锁,仍然需要显示的释放,否则别的线程永远也获取不...
原创
47阅读
0评论
0点赞
发布博客于 1 年前

Java 并发编程 Synchronized

一、Synchronized1.1 概念       关键字synchronized是一种内置的锁机制,用来支持原子性(指一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉)。       被synchronized包括的代...
原创
49阅读
0评论
0点赞
发布博客于 1 年前

Java 并发编程之Exchanger(两方栅栏)

一、ExchangerExchanger,它是一种两方(Two-Party)栅栏,各方在栅栏位置上交换数据。当两方执行不对称的操作时,Exchanger会非常有用,例如当一个线程向缓 冲区写入数据,而另一个线程从缓冲区中读取数据。这些线程可以使用Exchanger来汇合,并 将满的缓冲区与空的缓冲区交换。当两个线程通过Exchanger交换对象时,这种交换就把这两 个对象安全地发布给另一方。...
原创
45阅读
0评论
1点赞
发布博客于 1 年前

Java 并发编程之CyclicBarrier(栅栏)

一、CyclicBarrierCyclicBarrier 也叫做栅栏(Barrier)类似于闭锁,它能阻塞一组线程直到某个事件发生。栅栏与闭锁的关键区别在于,所有线程必须同时到达栅栏位置,才能继续执行。闭锁用于等待事件,而栅栏用于等待其他线程。二、常用方法方法描述int await()等待所有各方调用 await此障碍。int await(long timeo...
原创
55阅读
0评论
0点赞
发布博客于 1 年前

Java 并发编程之Semaphore(信号量)

一、SemaphoreSemaphore 是一种计数信号量(Counting Semaphore)用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量。计数信号量还可以用来实现某种资源池,或者对容器施加边界。Semaphore中管理着一组虚拟的许可(permit),许可的初始数量可通过构造函数来指定。 在执行操作时可以首先获得许可(只要还有剩余的许可),并在使用以后释放许可...
原创
73阅读
0评论
0点赞
发布博客于 1 年前

Java 带执行结果的线程(Callable 、 Future 与 FutureTask)

二、CallableCallable和Future,一个产生结果,一个拿到结果。Callable接口中只有一个call()方法,和Runnable相比,该方法有返回值并允许抛出异常。方法描述V call()计算结果,如果无法执行则抛出异常。二、FutureFuture表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行...
原创
65阅读
0评论
0点赞
发布博客于 1 年前

Java 并发编程CountDownLatch

一、CountDownLatch1)CountDownLatch也叫闭锁,闭锁是一种同步工具类,可以延迟线程的进度直到其闭锁为打开状态。2)闭锁的作 用相当于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭的,并且没有任何线程能通过, 当到达结束状态时,这扇门会打开并允许所有的线程通过。当闭锁到达结束状态后,将不会再改变状态,因此这扇门将永远保持打开状态。3)闭锁可以用来确保某些活动直到其...
原创
33阅读
0评论
0点赞
发布博客于 1 年前

Java 并发编程CopyOnWriteArrayList、CopyOnWriteArraySet

一、CopyOnWrite多读少写的场景 如何提高性能(转)特点:内部持有一个ReentrantLock lock = new ReentrantLock();底层是用volatile transient声明的数组 array读写分离,写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给旧数组适用场景:CopyOnWrite适用于读多写少的并发情况。优点...
原创
37阅读
0评论
0点赞
发布博客于 1 年前