自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

黄小鑫的博客

大神都是从菜鸟一步步转变而来的

  • 博客(148)
  • 收藏
  • 关注

原创 小菜找实习——阿里3月27日场笔试第一题

题目描述小强现在可以将任何一个字符串的一位以O(1)的代价移到末尾现在给定一个字符串S,字符串T。求问最少用几次可以将S以上述的方法移动变成T样例输入acdkckad样例输出2将a移到最后变成cdka,将d到最后变成ckad一开始去想求公众最长子序列,然后以字符串的长度减去这个序列长度,差点把自己写死。最后也没跑过,那时候心态有点小崩。(后来做完和大家...

2020-03-27 11:33:45 479 2

原创 小菜找实习——阿里3月20日笔试第二题

前言:笔者转专业学生在美国读研一,平时学习算法主要是通过leetcode,公开课,google等方式。这次找实习做国内这些笔试的算法编程题,确实发现和平时写的leetcode不一样。有三点要注意1.要注意输入输出的格式 国内的编程题是纯白板,因此字节跳动是我的第一场笔试,也完全没经验 用了很长时间才弄懂国内的平台是怎么处理输入输出的。2.leetcode上很多算法的实现的容器大多都是...

2020-03-22 00:20:51 909

原创 Java函数式编程

函数式编程的定义函数式编程是一种编程的范式,他将计算视为函数的运算,避免变化状态和可变数据。他是一种声明式编程范式,也就是说,编程是用表达式或者声明而不是语句来完成的。Lamda 表达式 : (a,b) -> a + b比起指令式的编程,函数式编程更加强调程序执行的结果而不是执行的过程,倡导利用若干个简单的执行单元让计算结果不断渐进,逐层推导复杂的运算userList.stream().skip(1).peek(uer -> log.debug("user:{}", user.g

2021-02-08 23:36:51 150 2

原创 Java实现消息摘要算法加密

消息摘要算法MD(Message Digest) SHA(Secure Hash Algorithm) MAC(Message Authentication Code) 验证数据完整性 数字签名核心算法消息摘要算法-MDMD5 MD家族(128位摘要信息)MD5应用消息摘要算法-SHA 安全散列算法 固定长度摘要信息 ...

2021-02-03 20:52:17 157 1

原创 密码学初识

1.前言转专业同学对于密码学可能了解都比较少,在慕课网上看到了一门课,简单讲了一下密码学以及在Java中相关的使用。特此做一个学习笔记2.密码常用术语明文:待加密的信息密文:经过加密后的明文加密:明文转化为密文的过程加密算法:明文转化为加密的算法加密密钥:通过加密算法进行操作加密的密钥解密:将密文转化为明文的过程解密算法:将密文转化为明文的算法解密密钥:通过解密算法进行解密操作的密钥密码分析:截获密文者通过分析截获的密文从而推断出原来的明文或密钥的过程主.

2021-02-03 18:20:47 384

原创 阿里淘系21春招实习过经

阿里巴巴闲鱼部门一面 3.17日晚9 (60分钟)1.项目(20分钟)秒杀系统如何解决超卖问题(sql语句count>0才会减库存)2.redis能否用来做消息队列3.redis中有哪些数据结构4.redis为什么快5.IO多路复用是指什么6.为什么redis是单线程,单线程的好处6.什么是同步和异步7.redis的持久化机制8.数据库Innod...

2020-04-20 07:02:25 276

原创 腾讯PCG事业部后台实习开发过经(已拿offer)

前提:我只学过Java,所以面试官没问过我任何c++的东西,甚至Java的一些知识点也没怎么问。基本都是项目+算法+一点网络腾讯PCG事业部一面 3.17日晚10点40(80分钟)1.手撕代码(二分搜索、反转链表),这个真的难度一般,直接秒了2.ES实现的原理是什么3.项目你这个秒杀地址接口到底是干嘛的?为什么要把这个秒杀地址的信息放入redis?实际上是把秒杀产品放...

2020-04-10 05:51:43 1411

原创 UCBCS188 AI学习笔记(2)informed search (启发函数搜索)

搜索的启发函数启发函数是什么?一个估计离重点还有多少距离的函数。 为特殊的搜索问题设计 例子:曼哈顿距离,欧几里得距离贪心搜索策略:扩展你认为最接近距离的结点通常情况:最快的带你走向一个错误的目标最差情况:像一个没有错误指令的DFSA*搜索算法会将当前已走过的代价结合启发函数一起决定如何扩展结点。可以这么理解 A* = UCS + Greedy...

2020-03-28 07:10:50 702

原创 动态规划实战16 leetcode-198. House Robber

确定状态:dp[i]表示歹徒抢到第i个房子时候最大收益对于一个歹徒来说:到第i个房子不抢,那么在此时他的收益就是到i-1个房子时候的收益第i个房子抢了,那么最大收益就是抢第i个房子的收益加上抢到第i-2个房子收益和。状态转移方程dp[i] = max{dp[i-1] , dp[i-2]+nums[i-1] }初始条件和边界条件dp[0]=0dp[1]=nums...

2020-03-27 05:46:36 122

原创 动态规划实战15 leetcode-256. Paint House

确定状态:这个题其实和之前的那个阿里矩阵题是一样的,只不过是状态转移方程稍有不同,paint house就是把相邻的情况排除了。dp[i][j]代表从0paint到i号房子,在i号房子涂j号色时用的最少costs。因此状态转移方程如下dp[i][j] = dp[i][j] + min{ dp[i-1][k]} 其中k=1....m 且k!=j初始条件和边界条件dp[i][...

2020-03-27 04:57:12 167

原创 动态规划实战14 leetcode-312. Burst Balloons

这道题目是hard类题,笔者表示没碰到过第一次遇到真的很难写出来。首先如果用暴力搜索的方法,对每种情况进行搜索判断,那么需要有n*n-1*n-2*....*1 = n! 显然这样的时间复杂度太高那么接下来想到的就是如何用dp去解决问题。如何确定状态和找出状态转移方程一直是dp问题的难点,这道题也不例外。确定状态c[i][j] = maxCoins(nums[i] - nums[...

2020-03-27 02:36:11 108

原创 动态规划实战13 leetcode-121. Best Time to Buy and Sell Stock

前言:这道题目实可以用 Kadane's Algorithm解决对于kadane's algorithm 我们可以这么想,假设输入是[7,1,5,3,6,4]那么我们可以通过这个数组得到在每一天前买 后一天卖的数组(称收益数组) [-6,4,-2,3,-2]实际上这样就转换成了什么问题?没错!maximum subarray!我们只要求收益数组的maximum subar...

2020-03-26 11:38:48 99

原创 小菜找实习——阿里3.25场笔试第一题(矩阵数组最小差值和)

明天晚上就要笔试了,又有新的原题来参考练手了,这道题如果不知道viterbi算法可能通过dp有点难做出来。所以说学习是永无止境的hhh!图源自牛客论坛上(话说他们是怎么截图的,难道这样不算作弊吗,不太懂笔试的规则)输入描述45 9 5 4 44 7 4 10 32 10 9 2 3输出描述5确定状态Viterbi算法是说每到一个状态就记录下到当前状态的最...

2020-03-26 01:57:46 667

原创 动态规划实战12 leetcode-472. Concatenated Words

这道题目实际上可以用到之前的leetcode139中的算法word break我们先对words数组排序,排序的目的是减少后续的比较然后在每次循环里面直接判断当前的words[i]是不是可以由字典里面的数字组成。注意我们写代码的顺序,要等每次判断某个words[i]是否可以拆分 再把这个字符加入到字典里面。class Solution { public static Li...

2020-03-25 13:40:38 155

原创 动态规划实战11 leetcode-64. Longest String Chain

前言:这道题和阿里3.20笔试第二题有点像,等这类题熟悉后,去增加那道题的DP写法。这道题的思路是这样的(摘自别人的blog)如果想组成链,必须找到一个比当前字符串长度小一的字符串,没有的话,以当前字符为结尾的链长最大只能为1。基于这个思路,我们先建立一个Map lengthMap,用于存储每种长度的字符串有哪些。 接下来,再新建一个Map,用来存储以每个字符串为结尾的最长链的长度。...

2020-03-25 09:57:56 140

原创 动态规划实战10 leetcode-64. Minimum Path Sum

确定状态dp[i][j]表示在第i-1行第j-1列最大的path sum值状态转移方程dp[i][j] = dp[i][j] (i=0 and j =0) dp[i][j]+dp[i][j-1] (i=0 and j!=0) dp[i][j]+dp[i-1][j] (i!=0 and j=0) d...

2020-03-25 05:55:08 96

原创 动态规划实战9 leetcode-91. Decode Ways

前言:这个题如果没有做过 我感觉要想到状态转移方程还是有点难度的。确定状态最后一步:实际上我个人认为这个题的难点就是最后一步要理解好。每次新增一个数字,我们其实都要考虑1.新增的一个数字单独作用 增加多少种可能2.新增的一个数字与前面的一个数字加起来一起作用 增加多少种可能因此 dp[i]代表 到第i个数字有多少种decode ways状态转移方程dp[i] = 0...

2020-03-24 23:25:48 97

原创 动态规划实战8 leetcode-53. Maximum Subarray

确定状态这道题难就在确定状态。因为根据给定的输入,我们可能在中间找到最大值,而不是在最后找到最大值。但是我们可以用一个变量去保存全局的最大值dp[i]表示从下标0至下标i最大的子序列和状态转移方程dp[i] = max(dp[i-1]+nums[i],nums[i])\初始条件和边界条件dp[0] = =nums[0]计算的顺序dp[0] ..... dp[n-...

2020-03-24 11:27:06 98

原创 动态规划实战7 leetcode-221. Maximal Square

前言:这道题目我感觉确定状态反而是比较难的一件事确定状态设dp[i][j]代表到i行,j列的最大的正方形边长因为某一个点的最大正方形边长实际上是受他左边的点,上面的点,以及左上角的点影响的。我们知道,该点为右下角的正方形的最大边长,最多比它的上方,左方和左上方为右下角的正方形的边长多1,最好的情况是是它的上方,左方和左上方为右下角的正方形的大小都一样的,这样加上该点就可以构成一个更...

2020-03-24 03:27:45 102

原创 动态规划实战6 leetcode-139. Word Break

确定状态最后一步:我们判断从0开始到最后一个字符的整一个字符串是否breakable,检查这个字符串中的substring是否在dict中,并且除掉substring的那一部分是否也可以breakable。dp[i]表示0至i的字符串是否可以word break状态转移方程dp[i] = IsSubstringindict(j,i)&&dp[j] (其中j=i.....

2020-03-24 00:21:52 111

原创 动态规划实战4-leetcode 5.Longest Palindromic Substring

确定状态:最长的子串,减去两边的字符也一定是palindromedp[i][j] 代表以i开始,以j结束的字符串是不是palindrome状态转移方程:dp[i][j]=s.charAt(i)==s.charAt(j)&&(j-i+1<3||dp[i+1][j-1]);这种存在性的转移方程有点难写 笔者就直接写程序的表达了初始条件和边界条件没...

2020-03-23 13:31:02 78

原创 动态规划实战3-leetcode 55.Jump Game

这道题属于存在性动态规划确定状态:最后一步:如果青蛙能跳到最后一块石头n-1,我们考虑它跳的最后一步,这一步是从石头i跳过来,i<n-1,需要满足两个以下条件:1.青蛙可以跳到石头i2.最后一步不超过跳跃的最大距离:n-1-i<=a[i]设f[j]表示青蛙能不能跳到石头j状态转移方程:初始条件和边界情况f[0]=true计算顺序从左至右 计...

2020-03-23 10:52:31 121

原创 动态规划实战2-leetcode 62.unique path

确定状态:最后一步:机器人无论用何种方式到达右下角,总有最后一步的挪动 --向右或者向下假设机器人有x种方式走到(m-2,n-1),有y种方式走到(m-1,n-2)那么机器人有x+y种方式走到(m-1,n-1)为什么?加法原理:无重复、无遗漏dp[i][j]表示机器人走到第i行,第j列转移方程dp[i][j]=dp[i-1][j]+dp[i][j-1]初始条件和边界...

2020-03-23 09:35:40 119

原创 动态规划实战1-leetcode 983.Minimum Cost For Tickets

前言:最简单的动态规划比如爬楼梯、斐波那契数列就不做举例分析了。我们来看一下场景相对复杂的题目。确定状态 dp[i]表示到第i天所用的最少的cost状态转移方程(这道题不难写)dp[i]=dp[i-1] 如果在第i天没有traveldp[i]= min {dp[i-1]+costs[0],dp[i-7]+costs[1],dp[i-30]+costs[2]}初始条件和边界条件...

2020-03-23 07:18:15 106

原创 小菜找实习-动态规划

前言:最近做了一些国内大厂的笔试,发现国内大厂很喜欢考动态规划。这篇文章记录一下自己对动态规划的学习。计划在26号之前练习二十道左右的DP题,题的来源选择leetcode吧,难度主要在在medium和hard之间。针对几个比较经典的题目,会写具体的文章去分析。动态规划一般解决什么问题?1.计数有多少种方式走到右下角 有多少种方法选出k个数使得和是sum2.求最大最小值从...

2020-03-23 05:48:14 148

原创 UCBCS188 AI学习笔记(1)uninformed search (无启发函数搜索)

最近有面试笔试都要准备,小菜鸟瑟瑟发抖。等面完了就继续学习写blog。压力就是动力!

2020-03-20 01:55:38 910

原创 JDBC中数据库连接池的使用与传统方式的比较

数据库连接的传统方式当有多个线程,每个线程都需要连接数据库执行SQL语句的话,那么每个线程都会创建一个连接,并且在使用完毕后,关闭连接。创建连接和关闭连接的过程也是比较费时间的,当多线程并发的时候,系统就会变得卡顿。并且,一个数据库同时支持的连接综述也是有限的,如果多线程并发量很大,那么数据库连接的总数就会被消耗光,后续线程发起的数据库连接就会失效。[外链图片转存失败,源站可能有防盗链机制,建...

2020-02-02 06:30:38 770

原创 Java 使用反射 Class.forName() 报错java.lang.ClassNotFoundException 的解决办法

今天复习使用反射机制,利用代码Class.forName(className)返回类对象时报错。其中className是从一个hero3.config文件中读取的字符串。检查发现使用File读取时路径没有问题。那是哪里出错了呢?进入debug模式后,发现 className字符串多了一个\n,并且报错的时候并没有输出\n。于是进入hero3.config检查,发现是文件中多敲了一...

2019-11-19 11:04:36 6912

转载 JDBC:深入理解PreparedStatement和Statement

前言最近听一个老师讲了公开课,在其中讲到了PreparedStatement的执行原理和Statement的区别。当时听公开课老师...

2019-11-18 14:50:27 208

转载 JSP会被淘汰吗?

...

2019-11-07 08:28:41 723

转载 Java中 Cloneable 、Serializable 接口详解

...

2019-10-31 23:06:03 294

原创 CMU 15-213 Introduction to Computer Systems学习笔记(23) Thread-Level Parallelism

TodayExploitng parallel executionemm有缘再看这个扩展部分吧

2019-10-01 11:51:36 225

原创 CMU 15-213 Introduction to Computer Systems学习笔记(22) Synchronization: Advanced

Reminder: Semaphores信号是非负全局同步变量, 由P和V操作管理,并且P操作将信号量作为参数。Using semaphores to schedule shared resources上一节课是利用信号量来提供互斥,其他方法也可以做到保护共享变量。我们也可以使用信号量以不同的方式协调对共享数据结构的访问(网上看了下说是同步的概念https://blog.csd...

2019-10-01 08:18:36 123

原创 CMU 15-213 Introduction to Computer Systems学习笔记(21) Synchronization: Basic

实际上,有一类很重要的并发编程,这种并发编程模型叫做【fork】和【join】(分叉和会和),这个模型中,程序有一系列阶段组成,在每个阶段,都有多个工作线程和一个管理线程,程序会创建多个工作线程,然后每个工作线程解决该阶段的某些问题,在程序中,你可以使用某个可以切分成多个部分你的数据结构,然后每个线程更新其该数据结构中的某个块,但出于某种原因,管理线程必须等待所有的工作线程才能进入下一阶段,这里做...

2019-09-30 12:25:26 222

原创 CMU 15-213 Introduction to Computer Systems学习笔记(20) Concurrent Programming

Iterative Servers上图中,客户端2直到服务端回应才运行,否则一直处理等待状态。你可能会认为此时的客户端连接会被阻断,但是尝试一下会发现,连接是在内核kernel,然后返回,write也是执行后马上返回,直到客户端2调用了read函数 等待服务器的回复。Where Does Second Client Block?Fundamental Flaw of Itera...

2019-09-30 04:55:34 179

原创 CMU 15-213 Introduction to Computer Systems学习笔记(19) Dynamic Memory Allocation: Advanced Concepts

这节课主要是学习一些更复杂的技术,研究不同数据结构去存储 free list我们要看implict allocators,因此我们会研究垃圾回收是怎么工作的。老师说一旦你开始了动态的分配存储,事情变坏的会很快。Explicit Free Lists这里说的我们维护的block不是一整块,而是自由分配那些free block,因此我们存储的是forward/back pointer...

2019-09-29 23:06:43 322

原创 CMU 15-213 Introduction to Computer Systems学习笔记(18) Dynamic Memory Allocation: Basic Concepts

之前学习的虚拟内存机制,以及它如何为系统提供如此多的有功功能,随着这种大型连续字节数组的抽象,现在一旦我们获得了大量的字节,我们必须管理它,我们必须有一些机制来管理和使用这些资源,本周的主题是存储器的分配,以及储存器分配器的工作原理,以及如何使用它们来管理内存中的虚拟系统。Basic conceptsDynamic Memory Allocation 动态内存分配动态储存器分配器的...

2019-09-29 08:19:59 189

原创 CMU 15-213 Introduction to Computer Systems学习笔记(17) Virtual Memory:System

这节课是承接上面的一节课,系统的讲了Virtual Memory。。自己听课没有人讨论没有老师解答表示已经晕掉了。。Review Of SymbolsTransaction Lookaside Buffer (TLB)Simple Memory System ExampleSimple Memory System TLB假设CPU执行了一条指令,它产生了一个有...

2019-09-28 14:29:33 307

原创 CMU 15-213 Introduction to Computer Systems学习笔记(16) Virtual Memory: Concepts

Virtual Memory: ConceptsAddress spacesA System Using Physical Addressing在使用物理寻址的系统中,以CPU执行一条移动指令为例,生成了一个有效的物理地址,这个地址实际上是主存储器中一个字节的偏移量,如上图,CPU在这里生成的物理地址为4,然后内存从该地址获取其中保存的字,然后将其发送回CPU,实际上,这是非常简单...

2019-09-26 04:15:06 254

原创 CMU 15-213 Introduction to Computer Systems学习笔记(15)System-Level I/O

Unix I/ODirectory HierarchyRIO (robust I/O) packageBuffered I/O: ImplementationRIO ExampleMetadata, sharing, and redirection文件元数据是指文件中实际包含的数据信息。How the Unix Kernel Represents O...

2019-09-24 12:24:52 480

空空如也

空空如也

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

TA关注的人

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