
经验分享
文章平均质量分 72
摸鱼的杰哥
这个作者很懒,什么都没留下…
展开
-
Java中级面试题进阶(七)-jvm篇
双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,这样所有的加载请求都会被传送到顶层的启动类加载器中,只有当父加载无法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会尝试去加载类。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在 JVM 中的唯一性,每一个类加载器,都有一个独立的类名称空间。负责加载用户类路径(classpath)上的指定类库,我们可以直接使用这个类加载器。原创 2023-02-14 09:38:59 · 177 阅读 · 0 评论 -
Java中级面试题进阶(六)-jvm篇
CMS 使用的是标记-清除的算法实现的,所以在 gc 的时候回产生大量的内存碎片,当剩余内存不能满足程序运行要求时,系统将会出现 Concurrent Mode Failure,临时 CMS 会采用 Serial Old 回收器进行垃圾清除,此时的性能将会被降低。大对象也会直接进入老生代。Parallel Old 是 Parallel 老生代版本,Parallel 使用的是复制的内存回收算法,Parallel Old 使用的是标记-整理的内存回收算法。老年代回收器一般采用的是标记-整理的算法进行垃圾回收。原创 2023-02-14 09:38:07 · 119 阅读 · 0 评论 -
Java中级面试题进阶(五)- MyBatis篇
RowBounds 表面是在“所有”数据中检索数据,其实并非是一次性查询出所有数据,因为 MyBatis 是对 jdbc 的封装,在 jdbc 驱动中有一个 Fetch Size 的配置,它规定了每次最多从数据库查询多少条数据,假如你要查询更多数据,它会在你执行 next()的时候,去查询更多的数据。分页插件的基本原理是使用 MyBatis 提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 SQL,然后重写 SQL,根据 dialect 方言,添加对应的物理分页语句和物理分页参数。原创 2023-02-14 09:22:49 · 123 阅读 · 0 评论 -
Java中级面试题进阶(四)-多线程篇
如果使用ReentrantLock,可能本身是为了防止线程A在写数据、线程B在读数据造成的数据不一致,但这样,如果线程C在读数据、线程D也在读数据,读数据是不会改变数据的,没有必要加锁,但是还是加锁了,降低了程序的性能。这是有用的,比方说StringBuffer,它是一个线程安全的类,自然最常用的append()方法是一个同步方法,我们写代码的时候会反复append字符串,这意味着要进行反复的加锁->解锁,这对性能不利,因为这意味着Java虚拟机在这条线程上要反复地在内核态和用户态之间进行切换。原创 2023-02-14 08:44:11 · 179 阅读 · 0 评论 -
Java中级面试题进阶(三)SpringMVC篇
实际上大部分时候 spring bean 无状态的(比如 dao 类),所有某种程度上来说 bean 也是安全的,但如果 bean 有状态的话(比如 view model 对象),那就要开发者自己去保证线程安全了,最简单的就是改变 bean 的作用域,把“singleton”变更为“prototype”,这样请求 bean 相当于 new Bean()了,所以就可以保证线程安全了。比如,某个事务尝试插入记录 A,此时该事务还未提交,然后另一个事务尝试读取到了记录 A。原创 2023-02-10 09:01:15 · 137 阅读 · 0 评论 -
Java中级面试题进阶(二)-SpringCloud篇
spring cloud 是一系列框架的有序集合。在复杂的分布式系统中,微服务之间的相互调用,有可能出现各种各样的原因导致服务的阻塞,在高并发场景下,服务的阻塞意味着线程的阻塞,导致当前线程不可用,服务器的线程全部阻塞,导致服务器崩溃,由于服务之间的调用关系是同步的,会对整个微服务系统造成服务雪崩。服务熔断就是相当于我们电闸的保险丝,一旦发生服务雪崩的,就会熔断整个服务,通过维护一个自己的线程池,当线程达到阈值的时候就启动服务降级,如果其他请求继续访问就直接返回fallback的默认值。原创 2023-02-10 09:00:38 · 208 阅读 · 0 评论 -
Java中级面试题进阶(一)-SpringBoot篇
用他们来做自动配置;Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就失效,帮我们进行自动配置工作。标注在某个类上,表示这是一个Spring Boot的配置类;Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式处理方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。原创 2023-02-10 08:59:02 · 294 阅读 · 0 评论 -
120 个 Java 经典面试题
与此对应,LinkedList 是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是 O(n)。这里有 Servlet 的例子。java.util 包下面的所有的集合类都是快速失败的,而 java.util.concurrent 包下面的所有的类都是安全 失败的。重定向(redirect)以后,之前请求作用域范围以内的对象就失效了,因为会产生一个新的请求,而转发(forwarding)以后,之前请求作用域范围以内的对象还是能访问的。原创 2023-02-09 09:50:36 · 212 阅读 · 0 评论 -
Java并发面试题
wait()方法是当前执行代码的线程进行等待,将当前线程放入预执行队列,并在wait()所在的代码处停止执行,直到接到通知或者被中断为止。Java内存模型规定了所有字段(这些字段包括实例字段、静态字段等,不包括局部变量、方法参数等,因为这些是线程私有的,并不存在竞争)都存在主内存中,每个线程会 有自己的工作内存,工作内存里保存了线程所使用到的变量在主内存里的副本拷贝,线程对变量的操作只能在工作内存里进行,而不能直接读写主内存,当然不同内存之间也 无法直接访问对方的工作内存,也就是说主内存是线程传值的媒介。原创 2023-02-09 09:25:38 · 384 阅读 · 0 评论 -
Java基础面试题及答案
当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。比如我们的应用中有两套主题,分别为亮色主题LightTheme和暗色主题DarkTheme,这两种主题我们可以通过一个抽象的类或接口来定义,而在对应主题下我们又有各类不同的UI元素,比如Button、TextView、Dialog、ActionBar等,这些UI元素都会分别对应不同的主题,这些UI元素我们也可以通过抽象的类或接口定义,抽象的主题、具体的主题、抽象的UI元素和具体的UI元素之间的关系就是抽象工厂模式最好的体现。原创 2023-02-07 09:12:53 · 3325 阅读 · 1 评论 -
BTA 常问的 Java基础39道常见面试题及详细答案(三)
NIO是为弥补传统IO的不足而诞生的,但是尺有所短寸有所长,NIO也有缺点,因为NIO是面向缓冲区的操作,每一次的数据处理都是对缓冲区进行的,那么就会有一个问题,在数据处理之前必须要判断缓冲区的数据是否完整或者已经读取完毕,如果没有,假设数据只读取了一部分,那么对不完整的数据处理没有任何意义。我们学设计模式,是为了学习如何合理的组织我们的代码,如何解耦,如何真正的达到对修改封闭对扩展开放的效果,而不是去背诵那些类的继承模式,然后自己记不住,回过头来就骂设计模式把你的代码搞复杂了,要反设计模式。原创 2023-02-07 08:45:49 · 131 阅读 · 0 评论 -
BTA 常问的 Java基础39道常见面试题及详细答案(二)
JDK6,7中的ConcurrentHashmap主要使用Segment来实现减小锁粒度,把HashMap分割成若干个Segment,在put的时候需要锁住Segment,get时候不加锁,使用volatile来保证可见性,当要统计全局时(比如size),首先会尝试多次计算modcount来确定,这几次尝试中,是否有其他线程进行了修改操作,如果没有,则直接返回size。举个例子,当一个线程使用 put 方法时,另一个线程不但不可以使用 put 方法,连 get 方法都不可以,好霸道啊!原创 2023-02-07 08:38:38 · 215 阅读 · 0 评论 -
BTA 常问的 Java基础39道常见面试题及详细答案(一)
以上这个示例,我们只是重写了HashCode方法,从上面的结果可以看出,虽然两个对象的HashCode相等,但是实际上两个对象并不是相等,因为我们没有重写equals方法,那么就会调用Object默认的equals方法,显示这是两个不同的对象。这里我们将生成的对象放到了HashSet中,而HashSet中只能够存放唯一的对象,也就是相同的(适用于equals方法)的对象只会存放一个,但是这里实际上是两个对象ab都被放到了HashSet中,这样HashSet就失去了他本身的意义了。这显然会大大降低效率。原创 2023-02-07 08:34:06 · 113 阅读 · 0 评论 -
被吹的神乎其神的Python到底都能干什么
目前主流的两大深度学习框架 TensorFlow 和 Pytorch 都是 Python 写的,而且小而美的 Darknet 也是 Python 开发的。目前我也在使用 Python 进行深度学习的相关开发,如果用java 进行开发将非常复杂,因为神经网络计算都是大量的高维矩阵进行复杂的乘法运算。对于海量数据的处理是 Python 的强项。能开发 Web 的不仅仅有 Java , Python 也可以进行快速的 Web 开发,Django、Flask 等都是知名的 Python Web 框架。原创 2023-01-28 10:01:49 · 130 阅读 · 0 评论 -
界面设计的基本规则
2:界面引导一定要好,用户使用一个新软件的过程实际上是一个接受新事物的过程,如果他不能在软件中时时刻刻清楚的感受到自己处于的位置。3:尽量减少用户的输入率,输入的错误率非常高,所以如果可以通过选择和点击完成的事情就不要让用户来输入,虽然这样可能会让界面设计难度加大许多。1: 实现所有的功能,界面是一个应用的输入输出,输入数据,展示数据全部是界面的功劳,因此最基础的要求是它能满足我们应用所要求的功能。4:界面的风格一定要统一,统一的风格在用户的使用过程中能感受到软件的一致性。原创 2023-01-28 09:39:21 · 321 阅读 · 0 评论 -
lua中字符串匹配笔记
hello 和from作为模式中左匹配为%1,world 和lua为右匹配,为%2。这种编码将一些特殊字符(比 ‘=’ ‘&’ ‘+’)转换为"%XX"形式的编码,repl是字符串,则为替换。string.gsub 函数有三个参数:目标串,模式串,替换串。如,将"a+b = c" 编码为 “a%2Bb+%3D+c”%b 表示匹配对称字符,注意其只能针对的ansi码单字符。以 ‘^’ 开头表示只匹配目标串的开始部分,采用 ‘.-’ 则为最短匹配,即匹配 “/XX是字符的16进制表示,空白为’+'。原创 2023-01-18 22:24:11 · 1047 阅读 · 0 评论 -
PHP CURL 自定义标头
PHP CURL 自定义标头原创 2023-01-14 07:15:00 · 1704 阅读 · 0 评论 -
记录一次JS解密 DES加密的逆向分析
第一步,就是模拟登录,发现参数 pass: 023wM2WIFWWAds/GIN5XDw==,为加密参数。第四步,看到都是标准加密参数,拿到key和iv直接进行加密就可以了,JS也不用单独扣出来了。第二步,直接看对应启动器,进行分析,直接点login那个JS进去。记录一下:将分析过程发布出来,有需要学习的可以参考一下。第三步,直接就看到加密参数,下断点跟进去。分析内容:密码参数加密。原创 2023-01-12 09:23:12 · 228 阅读 · 0 评论