- 博客(39)
- 收藏
- 关注
原创 LeetCode刷题日记精选例题(详细解析+代码+链接)
*这种方式是普通方式,处理起来比较繁琐,还有一种双指针处理方式,这个是我在看别人文章时看到的处理方式,效果很不错。解题思路,我们先观察一下扩充和没扩充的长度差距**str.append(" ");解题思路,我们先观察一下扩充和没扩充的长度差距。关于KMP算法的介绍使用请看我的上一篇博文。三、左旋转字符串(剑指Offer)四、实现strStr()二、翻转字符串里的单词。//最长子字符串长度。
2025-01-12 20:28:54
574
原创 leetcode刷题之轮转数组(超详解刷爆力扣)_力扣循环数组
都到这里了,相信大家都能理解这种思路了,但是这种每次向右边轮转数组,所有的值就要往后挪一次,时间复杂度较大,那我们有没有什么方法把他优化一下呢?😖😖😖我们看接下来的思路二。😃😃😃到了这里我们完成了一半啦,接着往下看:👀👀👀最后将新数组的元素再拷贝一份放入原数组就可以了。但是如果K大于数组最大的长度的时候我们会发现出现问题,因此我们待会需要处理一下。 跟着思路走下去💪💪💪最后我们发现竟然真的成功了,不愧是大神的方法,时间复杂度和空间复杂度都优化了。思路我们分析好了让我们直接上代
2025-01-12 20:25:14
824
原创 JavaScript 逐点突破之单线程与异步,作为前端必知必会
优点:实现比较简单,执行环境相对单纯缺点:只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。常见的浏览器无响应(假死),往往就是因为某一段 Javascript 代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。为了解决这个问题,JavaScript 语言将任务的执行模式分为两种:同步和异步。
2025-01-11 21:40:56
613
原创 JavaScript 游戏开发:手把手实现碰撞物理引擎
这段代码定义了id为gameboard的元素,并放在了元素下,元素主要是用来设置背景色和画布大小。在元素的下方引入 index.js 文件,这样可以在 DOM 加载完成之后再执行 JS 中的代码。padding: 0;margin: 0;main {样式很简单,去掉所有元素的外边距、内间距,并把元素的宽高设置为与浏览器可视区域相同,背景色为深灰色。
2025-01-11 21:37:15
1159
原创 JavaScript 正则表达式_var title=body
上题中,(javascript|php)会被当做子表达式来处理,内容会被捕获,但在程序中,捕获的内容没有任何用途,这种情况下,可以使用(?\d{3,5} :如在上题字符串中,既匹配三个,也可以匹配五个,那么,正则表达式中会自动匹配多的那一种,这在正则中贪婪匹配原则。display()函数没有定义,执行第5行代码时,出错,会被catch语句捕获,错误的相关信息会被保存到对象e中。上题中,如果直接使用 /./ 匹配的是任意一个字符,我们只想匹配字符‘.’,所以需要转义。查找连续的相同的四个数字,如:1111…
2025-01-11 21:33:34
814
原创 CentOS下搭建ftp服务器_centos 搭建ftp
默认是匿名登录的,如果你想通过账户去登录则修改vsftpd.conf文件注意:里面有的配置可能vsftpd.conf 里面没有,则需要你手动添加若出现 getsebool: SELinux is disabled 的错误解决方法:vim /etc/selinux/config修改:SELINUX=1,然后重启Linux将红框内的内容设置为“on”5. 创建匿名用户可上传文件夹默认情况下,ftp的根目录为/var/ftp,为了安全,这个目录默认不允许设置为777权限,否则ftp将无法访问。但是
2025-01-11 04:27:53
1251
原创 CentOS下使用Varnish为网站加速_centos varnish
注:pass:绕过缓存,即不从缓存中查询内容或不将内容存储至缓存中;pipe:不对客户端进行检查或做出任何操作,而是在,并直接将数据在二者之间进行传送;此时,keep-alive连接中后续传送的数据也都将通过此管道进行直接传送,并不会出现在任何日志中;
2025-01-11 04:24:13
338
原创 Centos7安装Mysql、九条命令搞定
大家如果如果想快速安装只需要一股脑按照我的命令来就行,不需要看后面的截图部分,首先找一个你准备安装到哪里的一个文件夹,这个时候就可以开始了。(备注:这里修改你的新密码)5、grep “password” /var/log/mysqld.log (备注:查看默认的密码)5、grep “password” /var/log/mysqld.log (备注:查看默认的密码)截止到这里已经下载、安装、启动、并修改完密码了,接下来只需要简单配置一下即可。6、mysql -uroot -p (备注:输入刚刚默认的密码)
2025-01-11 04:16:46
759
原创 Java NIO系列教程(8)-SocketChannel的最佳实践
然后,调用SocketChannel.read()。如果返回的是-1,表示已经读到了流的末尾(连接关闭了)。注意SocketChannel.write()方法的调用是在一个while循环中的。如果SocketChannel在非阻塞模式下,此时调用connect(),该方法可能在连接建立之前就返回了。设置后,就可以在异步模式下调用connect(), read() 和write()。要从SocketChannel中读取数据,调用一个read()的方法之一。写数据到SocketChannel用的是。
2024-11-28 15:11:28
717
原创 Java Map接口(HashMap、TreeMap)
/containsKey(key) 判断集合是否包含指定的键。System.out.println(“添加元素后,TreeMap元素个数为:” + treeMap.size());System.out.println(“初始化后,TreeMap元素个数为:” + treeMap.size());for (String key : students.keySet()) {//keySet() 获取所有的键。
2024-11-28 15:09:26
759
原创 Java List集合(ArrayList、LinkedList、Vector)的使用方法
所以需要同步的时候需要自己手动同步,比较费事,可以使用提供的集合工具类实例化的时候同步:具体使用List springokList=Collections.synchronizedCollection(new 需要同步的类)。内部实现和ArrayList一样都是数组存储,最大的不同就是它支持线程的同步,所以访问比ArrayList慢,但是数据安全,所以对元素的操作没有并发操作的时候用ArrayList比较快。//在列表的索引0处插入元素1。
2024-11-28 15:07:26
621
原创 Java EE开发系列教程 - 添加JPA模块
javax.persistence.schema-generation.database.action 属性的值,drop-and-create ,表示数据库表会在每次项目部署后重新创建。此类为POJO(simple plain old java bean),意思为此类提供一组属性,并提供用这些属性初始化对象的构造方法,以及访问和设置这些属性的getter和setter方法。点击右边的 Add。@Id注解声明此成员变量为数据库中的主键,使用IDENTITY生成策略,即JPA负责生成ID的数值。
2024-11-28 13:50:46
2044
原创 java c3p0连接数据库实例(mysql)完整实例
如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource("MySQL");”这样写就表示使用的是name是MySQL的配置信息来创建数据源。如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource();”这样写就表示使用的是C3P0的缺省(默认)配置信息来创建数据源。//使用C3P0的命名配置来创建数据源。//关闭存储查询结果的ResultSet对象。//从数据源中获取数据库连接。
2024-11-28 13:48:46
728
原创 JAVA API调用elasticsearch实现基本增删改查
大家可能会有疑问,问什么都没有看到连接ES系统的代码,因为我这边代码是写在Test测试用例中,所以每一个操作都需要连接到ES系统这个操作。我们在重新查询一下id为: AWNtYjiVjqSYg4HhYcQZ 的索引文档,看一下数据是否已经修改。可以看到不管是查询结果还是ES数据都没有那条对应的数据了,这证明我们删除的API操作是成功的。我们从上面的截图可以看出数据确实已经修改完毕了,证明修改的API操作是成功的。* 根据索引名称,类别,文档ID 删除索引库的数据。看看是否还可以查询到对应的数据。
2024-11-28 13:46:45
1029
原创 Java 9 - 17 特性解读:Java 11
Java 11 中,还有一些其它方面的特性和优化,比如引入了ZGC,支持支持 TLS 1.3 协议,引入了动态调用(invokedynamic)机制,另外原来商业版的JFR也进行了开源集成等等。在年初的Java生态调查数据显示Java 11的用户数量大幅增长,成为了主流版本选择之一。在Java 10中它不能用于修饰Lambda表达式的入参,其实对于一个Lambda表达式来说它入参的类型其实是可以根据上下文推断出来的。分别进行读写文件的字符串内容,放在之前老麻烦了,特别是对IO流不熟悉的同学来说。
2024-11-28 13:44:45
807
原创 Java 8:那些Java8的常见写法
如: return o1.getName().compareTo(o2.getName());注:只有从小到大排序才默认使用双冒号运算符,从大到小排序是不支持的哈。示例:获取所有用户的 id 集合。【3】排序(升序版:从小到大)Java 8 写法1:基础版。Java 8 写法2:进阶版。Java 8 写法3:终极版。Java 8 写法1:基础版。Java 8 写法2:终极版。示例:过滤年龄小于18的用户。示例:求所有用户的年龄总和。示例:求所有用户中最大年龄。示例:求所有用户中最小年龄。
2024-11-28 13:42:44
215
原创 Java 8 - 14 新特性和API ---持续更新ing
再然后就是Lambda 比如 new Thread( () -> System.out.println(“Hello Lambda”)).start();之前,只要是 interface 声明的,就是一个接口,里面的方法是public 并且不能有方法体的。System.out.println(function2.apply(“那一年 风吹半夏”));允许接口定义private的普通方法,可以在接口的default方法里调用,但可用性不大。优点就是在不改变现有规则的情况下,加入扩展。
2024-11-28 13:40:44
629
原创 Java 17的这些新特性,Java迈入新时代
密封类可以控制有哪些类可以对超类进行继承,在Java 17之前如果我们需要控制哪些类可以继承,可以通过改变类的访问级别,比如去掉类的public,访问级别为默认。通常我们使用instanceof时,一般发生在需要对一个变量的类型进行判断,如果符合指定的类型,则强制类型转换为一个新变量。record也可以单独定义作为一个文件定义,但是因为Record的使用非常紧凑,所以可以直接在需要使用的地方直接定义。既可以定义Apple,Pear,也可以将apple实例赋值给Fruit,并且可以对Fruit进行继承。
2024-11-28 13:38:43
657
原创 Java 16 中新增的 Stream 接口的一些思考
(addAll 一遍,后续 Stream 又一遍)。其实我们的目前只是将 mail 中的 cc 以及 sendTo 取出来,用于参与后续的 Stream。这对于每个元素本身就是集合类型的场景来说,非常适用。同时,我们也可以通过 JDK 内置 jdeps 工具查找过期以及废弃API以及对应的替换。是将一个对象映射为多个对象之后继续 Stream,例如将。里面的每一个数字取出,转换成一个新的。mapMulti 的思路就是将参数中的。但是,这样写显然很不优雅,首先是对于。mapMulti 的入参是一个。
2024-11-28 13:36:43
883
原创 Java 1028 人口普查
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。
2024-11-28 13:34:42
721
原创 jackson学习之九:springboot整合(配置文件)
contact(new Contact(“程序员欣宸”, “https://github.com/zq2599/blog_demos”, “zq2599@gmail.com”))| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 || git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |
2024-11-28 13:32:42
1231
原创 jackson学习之七:常用Field注解
虽然标题说是常用Field注解,其实上图中的这些注解也能用在方法上,只不过多数情况下这些注解修饰在field上更好理解一些,例如JsonIgnore,放在field上和get方法上都是可以的;| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 || 项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |
2024-11-28 13:30:39
812
原创 Hibernate框架介绍以及入门 【一】Hibernate 快速入门 框架的概述 什么是 Hibernate Hibernate 持久层的ORM框架 下载Hibernate 官网 编写测试代码
bigint(32) NOT NULL AUTO_INCREMENT COMMENT ‘客户编号(主键)’,varchar(32) NOT NULL COMMENT ‘客户名称(公司名称)’,hibernate核心配置文件的名称:hibernate.cfg.xml。配置hibernate的方言的 目的是生成对应不同数据的语句。—》required : Hibernate 开发的必须依赖的包。—》optional: Hibernate 开发的可选的jar包。2、Hibernate 开发必须的jar包。
2024-11-27 18:17:07
714
原创 Helm部署和体验jenkins
metadata:spec:capacity:nfs:执行命令kubectl create -f pv-helm-jenkins.yaml,创建PV;查看PV是否已经就绪:14h。
2024-11-27 18:15:06
923
原创 Hbase Api简单操作(Java)_javaapi操作hbase
【代码】Hbase Api简单操作(Java)_javaapi操作hbase。
2024-11-27 18:11:00
338
原创 HashTable - 哈希表 - 细节狂魔
哈希表 / 散列表 的概念中,元素关键码与其存储位置之间没有对应的关系,因此在,搜索的效率取决于搜索过程中元素比较的次数。:可以根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功.该方式即为哈希(散列)方法,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表(HashTable)(或者称散列表)实践中理解哈希表的运行原理。
2024-11-27 18:09:00
811
原创 HashMap的实现原理
注释中是这样解释的:如果当 n 很小,假设为 64 的话,那么 n-1即为 63(0x111111),这样的值跟 hashCode()直接做与操作,实际上只使用了哈希值的后 6 位。哈希表的初始容量为16,默认负载因子为0.75,当键值对的个数超过阈值时就会进行扩容,扩容为原来的两倍,当一个桶中的链长度超过8,并且表的容量大于64时就会转换为红黑树,当小于6时会由红黑树重新转换为链式存储。因为当n的大小位2的幂次方时,n-1的最后一位总是位1,这样参与计算&运算才有意义,如果位0,则末尾总是为0.
2024-11-27 18:06:59
1912
原创 HashMap源码阅读笔记
//***//***//***/容量为数组的长度,亦即桶的个数,默认为16,最大为2的30次方,当容量达到64时会进行树化。负载因子用来计算容量达到多少时才进行扩容,默认负载因子为0.75。当容量超过3/4时扩容。树化,当容量达到64且链表的长度达到8时进行树化,当链表的长度小于6时反树化。3、Node内部类Node是一个典型的单链表节点,其中,hash用来存储key计算得来的hash值。V value;4、红黑树相关上面了解了红黑树的一些性质和操作,接下来看看具体的实现。
2024-11-27 18:04:58
674
原创 HashMap实现原理及源码分析
public V put(K key, V value) { //如果table数组为空数组{},进行数组填充(为table分配实际内存空间),入参为threshold,此时threshold为initialCapacity 默认是1
2024-11-27 18:02:57
1183
原创 HashMap及HashTable源码解析
2)若没有在table[i]位置找到相同的key,则添加key到table[i]位置,新的元素总是在table[i]位置的第一个元素,原来的元素后调用addEntry方法。//若没有在table[i]位置找到相同的key,则添加key到table[i]位置,新的元素总是在table[i]位置的第一个元素,原来的元素后移。//遍历table[i]位置的链表,查找相同的key,若找到则使用新的value替换掉原来的oldValue并返回oldValue。//计算在数组中的存储位置。
2024-11-27 18:00:56
789
原创 HashMap 的7种遍历方式
/3,使用 For Each EntrySet 的方式进行遍历;3,使用 For Each EntrySet 的方式进行遍历;//4,使用 For Each KeySet 的方式进行遍历;//6,使用 Streams API 单线程的方式进行遍历;//5,使用 Lambda 表达式的方式进行遍历;//1,使用迭代器 EntrySet 的方式遍历。map.put(3, “娇娇2”);map.put(4, “娇娇3”);map.put(3, “娇娇2”);map.put(4, “娇娇3”);
2024-11-27 17:58:54
1071
原创 HashMap 基本原理以及底层分析
我们在扩充HashMap的时候,只需要看看原来的hash值新增的那个bit是1还是0就好了,是0的话索引没变,是1的话索引变成“原索引+oldCap“,由于新增的1bit是0还是1可以认为是随机的,因此resize的过程,均匀的把之前的冲突的节点分散到新的槽中了。// 数组的长度一定是2的N次方(例如16),如果hash值和该长度做与运算,那么该hash值可参与计算的有效二进制位就是和长度二进制对等的后几位,如果结果为0,说明hash值中参与计算的对等的二进制位的最高位一定为0.判断是否需要树化结构。
2024-11-27 17:56:52
583
原创 Hadoop常见问题及解决办法
在 重新格式化一个新的分布式文件时,需要将你NameNode上所配置的dfs.name.dir这一namenode用来存放NameNode 持久存储名字空间及事务日志的本地文件系统路径删除,同时将各DataNode上的dfs.data.dir的路径 DataNode 存放块数据的本地文件系统路径的目录也删除。2. 确保新的slave的ip已经添加到master及其他slaves的/etc/hosts中,反之也要将master及其他slave的ip添加到新的slave的/etc/hosts中。
2024-11-27 17:54:52
1367
原创 Hadoop常见问题及解决办法(1)
在 重新格式化一个新的分布式文件时,需要将你NameNode上所配置的dfs.name.dir这一namenode用来存放NameNode 持久存储名字空间及事务日志的本地文件系统路径删除,同时将各DataNode上的dfs.data.dir的路径 DataNode 存放块数据的本地文件系统路径的目录也删除。2. 确保新的slave的ip已经添加到master及其他slaves的/etc/hosts中,反之也要将master及其他slave的ip添加到新的slave的/etc/hosts中。
2024-11-27 17:52:51
863
原创 Hadoop之MapReduce04【客户端源码分析】
/ 提交任务,并等待响应1.Configuration 对象Configuration 用来存储相关的配置文件。在该类中有一段static代码块2.Job对象的获取我们来看下Job对象的实例化过程。// 获取Job对象进入getInstance(conf)方法。Job类中同样有static代码块。进入loadResources方法该方法的执行过程比较复杂,我们慢慢来分析,首先来看下简化的时序图。
2024-11-27 17:50:50
1062
原创 Hadoop之MapReduce04【客户端源码分析】(1)
进入getInstance(conf)方法。Job类中同样有static代码块。进入loadResources方法该方法的执行过程比较复杂,我们慢慢来分析,首先来看下简化的时序图。
2024-11-27 17:48:49
2122
原创 Google 面试六轮游,结果还是没过!Google面试真题分享
Google 整体面试流程上基本如下:我一共经历了 1 轮电话面试,5 轮 onsite,如果算上前面的HR 的预筛选的话,就是 7 轮.
2024-11-27 15:10:50
1087
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅