03 2019 档案
摘要:垃圾收集器需要解决的三个问题: 1)哪些内存需要回收 2)什么时候回收 3)如何回收 背景:程序计数器,虚拟机栈,本地方法栈3个区域随线程而生,随线程而灭,在这几个区域内不需要过多的考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟着回收了,所以我们着重需要探究的是堆和方法区,因为他们是线程共
阅读全文
摘要:OOM异常:OutOfMemoryError1.JAVA堆溢出JAVA堆用于存储对象实例,只要不断的创建对象,并且保证GC Roots到这些对象之间有路径可以来避免垃圾回收机制清除这些对象,那么在对象数量达到最大堆的容量限制之后就会产生OOM异常解决方案:先分析到底是出现了内存泄漏(无法释放已申请的内存空间)还是内存溢出(没有足够的内存空间使用)内存泄漏:通过工具查看泄漏对象到GC Roots的引...
阅读全文
摘要:以常用的HotSpot虚拟机和JAVA内存区域堆为例,探讨对象的创建,对象的内存布局以及对象的访问定位 一.对象的创建 1)类加载:虚拟机遇到一条new指令时,先检测这个指令的参数能否在常量池中定位到一个类的符号的引用,并检查这个符号代表的类否收以及被加载,解析和初始化,如果没有那么就必须执行相应的
阅读全文
摘要:背景介绍:假设现在有一个线程共享的变量c=0,让两个线程分别对c进行c++操作100次,那么我们最后得到的结果是200吗? 1.在线程不安全的方式下:结果可能小于200,比如当前线程A取得c的值为3,然后线程A阻塞了,线程B取得的c的值也是3,然后线程B也阻塞了,现在线程A被唤醒执行了++操作使得c
阅读全文
摘要:JVM的分区可以分为两种:线程私有的内存区和线程共享的内存区 一.JVM中线程私有的内存区: 1.程序计数器:当前线程所执行的字节码行号计数指示器,是线程私有的,即每个线程都有自己的程序计数器,需要注意的是,如果当前JVM执行的是Native代码(即非JAVA代码),那么程序计数器值为空 2.JAV
阅读全文
摘要:1.Lambda表达式:允许把函数作为一个方法的参数Lambda的优点:1)简洁2)非常容易并行计算3)可能代表未来编程趋势Lambda的缺点:1)若不要并行计算,很多时候计算速度没有传统的for快(并行计算有时候需要预热才能显示出效率)2)不容易调试3)若其他程序员没有学过lambda表达式,代表不容易让其他语言程序员看懂2.方法引用:直接引用已有的java类或实例的方法或构造器,使得语言结构更...
阅读全文
摘要:java为数据结构中的映射定义了一个接口java.util.Map,他实现了四个类,分别是:HashMap,HashTable,LinkedHashMapTreeMapMap不允许键重复,但允许值重复1.HashMap:最常用的Map,根据键的hashcode值来存储数据,根据键可以直接获得他的值(因为相同的键hashcode值相同,在地址为hashcode值的地方存储的就是值,所以根据键可以直接...
阅读全文
摘要:工厂方法模式继承了简单工厂模式的优点,还弥补了简单工厂模式的缺陷 关于简单工厂模式请戳这里! 工厂方法模式的定义:定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化,工厂方法模式让一个类的实例化延迟到其子类 简而言之就是工厂方法模式有多个子工厂,每个子工厂负责一个产品的生产,这些子工厂都有一
阅读全文
摘要:equals和hashcode是object类下一个重要的方法,而object类是所有类的父类,所以所有的类都有这两个方法equals和hashcode间的关系:1.如果两个对象相同(即equals比较返回true),那么他们的hashcode一定要相等2.如果他们的hashcode相等,他们的equals不一定相等假设两个对象,重写了其equals方法,其相等条件是属性相等,equals比较之后...
阅读全文
摘要:简单工厂模式的目的:使得对象的创建和使用分离,降低系统耦合,对用户隐藏类的实例创建细节 简单工厂模式属于创建型模式的一种 简单工厂模式的定义:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有相同的父类 简单工厂模式包含的3个角色: 1)工厂角色:即工厂类,负责实现创建所有
阅读全文
摘要:点滴感悟与总结! 1.单一职责原则:一个对象一个只包含单一的职责,并且该职责被完整的封装在一个类中(尽量降低系统耦合) (实现高内聚,低耦合的指导方针) 分析:一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而一个类承担的职责越多,相当于将这些职责耦合在一起,当其中一个职责发生变
阅读全文
摘要:链接:https://www.nowcoder.com/questionTerminal/504ad6420b314e5bb614e1684ad46d4d来源:牛客网一个合法的括号匹配序列被定义为:1. 空串""是合法的括号序列2. 如果"X"和"Y"是合法的序列,那么"XY"也是一个合法的括号序列
阅读全文
摘要:链接:https://www.nowcoder.com/questionTerminal/a461395335c946c5b409e79847796cd0来源:牛客网小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]..., A[N]}。牛博士给小易出了一个难题:对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数。...
阅读全文
摘要:链接:https://www.nowcoder.com/questionTerminal/f58859adc39f4edc9cd8e40ba4160339来源:牛客网魔法王国一共有n个城市,编号为0~n-1号,n个城市之间的道路连接起来恰好构成一棵树。小易现在在0号城市,每次行动小易会从当前所在的城
阅读全文
摘要:链接:https://www.nowcoder.com/questionTerminal/7e8aa3f9873046d08899e0b44dac5e43来源:牛客网小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。 你能帮帮小Q吗? 输入
阅读全文
摘要:老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩. 输入描述: 输入包括多组测试数据。 每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。 学生ID编号从1编到N。
阅读全文
摘要:扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):) 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 输入两手牌,两手牌之间用“-”连接
阅读全文
摘要:输入描述: 一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。 文件路径为windows格式 如:E:\V1R2\product\fpgadrive.c 1325 输出描述: 将所有的记录统计并将结果输出,格式:文件名代码行数数目,一个空格隔开,如: fpgadrive.c 1325 1
阅读全文
摘要:链接:https://www.nowcoder.com/questionTerminal/af709ab9ca57430886632022e543d4c6来源:牛客网小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,相差最小的有多少对呢?相差最大呢? 输入包含多组测试数据。 对于每组测试数
阅读全文
摘要:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出一个整数,代表最少需要删除的字符个数。 输入例子
阅读全文
摘要:Description 很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方
阅读全文
摘要:Description 小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。 小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。 你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字
阅读全文
摘要:小明正在玩一个“翻硬币”的游戏。 桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。 比如,可能情形是:**oo***oooo 如果同时翻转左边的两个硬币,则变为:oooo***oooo 现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转
阅读全文
摘要:Description 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,则称这个区间连号区间。 当N很小的时候
阅读全文
摘要:如下图所示,3 x 3 的格子中填写了一些整数。 +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+--+--+ 我们沿着图中的星号线剪开,得到两个部分,每个部分的数字和都是60。 本题的要求就是请你编程判定:
阅读全文
摘要:Description 100 可以表示为带分数的形式:100 = 3 + 69258 / 714。 还可以表示为:100 = 82 + 3546 / 197。 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。 类似这样的带分数,100 有 11 种表示法。 Input 从标准输入读
阅读全文
摘要:样例: 字符串“abcd1234"左移3位结果为”234abcd1“ K:左移位数 L:字符串长度 方案1:暴力 O(K * L) 可以每次将数组中的元素左移一位,循环K次。 abcd1234 ->4abcd123 ->34abcd12->234abcd1 算法复杂度为O(K * L) 方案2:暴力
阅读全文
摘要:样例:比如“abcdabc”,第一个只出现一次的字符为d,位置为3 解决方案1:O(n*n)的复杂度 遍历字符串中的每个字符,然后用该字符在字符串中进行查找,如果没有找到和当前字符相同的字符。则当前字符为第一个 只出现一次的字符。 解决方案2:O(n)的复杂度 采取空间换时间的策略 开一个辅助数组,
阅读全文
摘要:Description 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后 和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两 个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。 Input 输入的第一行为一个整数
阅读全文
摘要:Description 输入一个正整数n,输出n!的值。 其中n!=1*2*3*…*n。 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。 将a乘以一个整数k变为将数组A的每一个元
阅读全文
摘要:特点: 1.DES是对称性加密算法,即加密和解密是对称的,用的是同一个密钥 2.DES只处理二进制数据,所以需要将明文转换成为2进制数据 3.DES每次处理64位的数据,所以应该将明文切割成64位的分组,当最后一组数据不足64位的时候,高位补0 4.DES使用64位的密钥,但因为密钥中的每8位会被忽
阅读全文