一:java中==、equals的不同 1....因为在Integer类中,会将值在-128的缓存在常量池(通过Integer的一个内部静态类IntegerCache进行判断并进行缓存)中,所以这两个对象的引用值是相同的。...但是超过这个区间的话,会直接创建各自的对象(在进行自动装箱的时候,调用valueOf()方法,源代码中是判断其大小,在区间内就缓存下来,不在的话直接new一个对象),即使值相同,也是不同的对象,所以返回...,前者会创建对象,存储在堆中,而后者因为在-128到127的范围内,不会创建新的对象,而是从IntegerCache中获取的。...二:js中==与===的不同 1.首先===只能在js中使用,不能在java程序中使用,会报错。 2.
网上用 VBA 操作 EXCEL的 示例很多,但用 VBA 操作 PPT 的示例很少,而且通常有不少错误或者版本老旧的地方。 下面是我最近写的在 PPT 中批量插入图片的代码,供大家参考。...插入图片前的PPT页面: VBA 代码: Sub insert_images() ' 定义变量 Dim pptApp As Object, pptPres As Object, slide...PowerPoint.Application") 'End If On Error GoTo 0 'ActivePresentation.Slides.Count '获取当前演示文稿中的幻灯片数量...' 在当前演示文稿中插入图片 Dim slideIndex As Integer slideIndex = ActiveWindow.View.slide.slideIndex...'获取当前幻灯片的索引号 ' 幻灯片编号从1开始 Set slide = ActivePresentation.Slides(slideIndex) '当前slide ' 幻灯片编号从1
python在mysql中插入null空值 sql = “INSERT INTO MROdata (MmeUeS1apId) VALUES (%s)”%‘NULL’ %s没有引号,可以将“null”...中null写进数据库,达到NULL值效果。...%s加引号 values就是字符串,导致类型错误,插入错误。 sql = “INSERT INTO MROdata (MmeUeS1apId) VALUES (‘%s’)”%‘NULL’
创建用户时设置禁止shell登录 默认情况下,创建用户时,将按照/etc/default/useradd文件中定义的为用户分配shell。...Linux中附带了一个/sbin/nologinshell,当用户尝试连接时,它会显示一条消息“This account is current not available”。...这是禁止用户登录shell的一种方法。...为现有用户时设置禁止shell登录 更改现有用户的shell,可以使用usermod和chsh两个命令来修改: chsh命令使用语法如下: chsh -s /sbin/nologin {username...-s /sbin/nologin user03 也可以手动修改/etc/passwd文件中的用户shell。
最近买了台新的笔记本,重新装了一些软件,这次就说说怎么在 git 中配置用户信息吧。...查看配置列表 在配置用户信息前,我们需要确定自己是否已配置了用户信息。...上面的内容中,除了第一行来自全局配置,其他配置都是来自该 git 仓库,具体配置文件位置在 .git/config [core] repositoryformatversion = 0...用编辑器(通常是 vim)打开配置文件的命令如下: # 打开全局配置 git config --global --edit # 打开当前 git 仓库配置 git config --edit (希望你至少知道该如何退出...如果你想配置当前项目的用户信息,将 --global 去掉即可,或者也可以改成 --local git config user.email "person-email@gmail.com" 这在你用公司的电脑折腾自己的个人项目很有用
A:当对象被序列化时(写入字节序列到目标文件)时,transient阻止实例中那些用此关键字声明的变量持久化;当对象被反序列化时(从源文件读取字节序列进行重构),这样的实例变量值不会被持久化和恢复。...例如,当反序列化对象——数据流(例如,文件)可能不存在时,原因是你的对象中存在类型为java.io.InputStream的变量,序列化时这些变量引用的输入流无法被打开。...transient使用介绍 Q:如何使用transient? A:包含实例变量声明中的transient修饰符。片段1提供了小的演示。 ? ? ?...但不同的是,序列化和反序列化的是Foo对象,而不是ClassLib。此外,Foo包含一对变量,w和x,以及实例变量y和z。...由于JavaWorld中的“The Java serialization algorithm revealed”这篇文章,我们发现输出的含义: AC ED 序列化协议标识 00 05 流版本号 73 表示这是一个新对象
在 Java 中有多种方法可以比较日期,日期在计算机内部表示为(long型)时间点——自1970年1月1日以来经过的毫秒数。...在Java中,Date是一个对象,包含多个用于比较的方法,任何比较两个日期的方法本质上都会比较日期的时间。...这是对两种原始数据类型的比较,因此可以使用 和 == 来比较。 在比较日期之前,必须使用前面创建的 Date 对象中的数据来创建长整型。...() isAfter() isEqual() compareTo() 在 Java 8 中,可以使用新的 isBefore()、isAfter()、isEqual() 以及 compareTo() 来比较...Date1 is before Date2 总结 本文主要讲解了在 Java 中比较日期的几种常用方法,可以自己实际操作一下。
前言 我之前写过一篇AOP的文章 看AspectJ在Android中的强势插入 是通过AspectJ来实现的,本篇是『巴掌』的投稿,他通过使用ASM来讲解了在Java和Android中的AOP方法,非常值得大家学习交流...肯定不能是局部变量,因为两个方法间并不会共享局部变量,那么本文是将变量存为静态,方便不同方法间调用,具体可见TimeCache.java,代码比较简单,不多加介绍: ?...我给newFunc2方法增加了@Cost注解,但没给newFunc1方法增加,然后开始用ASM提供的类生成插入代码后的二进制流: ? 然后run一下,可以得到: ?...://www.ibm.com/developerworks/cn/java/j-lo-instrumentation/),简单点说就是我们得在JVM执行main函数前动点手脚,自己实现一个代理,在得到虚拟机载入的正常的类的字节码后通过...ASM提供的类生成一个插入代码后的字节流再丢给虚拟机,自定义的代理得实现ClassFileTransformer,并且提供premain()方法,写有premain方法的类得在MANIFEST.MF中显示调用
它和我们平时接触到的OOP都是编程的不同思想,OOP,即『面向对象编程』,它提倡的是将功能模块化,对象化,而AOP的思想,则不太一样,它提倡的是针对同一类问题的统一处理,当然,我们在实际编程过程中,不可能单纯的安装...那么AOP这种编程思想有什么用呢,一般来说,主要用于不想侵入原有代码的场景中,例如SDK需要无侵入的在宿主中插入一些代码,做日志埋点、性能监控、动态权限控制、甚至是代码调试等等。...AspectJ之Advice 又来一个Advice,Advice其实是最好理解的,也就是我们具体插入的代码,以及如何插入这些代码。...首先,我们需要自定义一个注解类,例如——DebugTool.java: ? 然后在需要插入代码的地方使用这个注解: ? 最后,我们来创建自己的切入文件。 ?...我们可以看见com.xys.aspectjxdemo包下的所有方法都被加上了try catch,同时,在catch中,被插入了我们切入的代码,但是最后,他依然会throw e,也就是说,这个异常已经会被抛出去
在springboot进行事务测试的时候,发现事务没有生效,在方法上添加了@Transactional注解并让方法先执行插入操作,接着再抛出个异常,触发事务回滚,代码如下: @Transactional...,事务回滚并没有效果,数据已经插入到DB中: 搜索了下,发现有人提到说MySQL数据库的事务不生效,可能和引擎类型有关系,因此下一步往这个方向排查一下。...查看MySQL数据表的引擎类型 通过show create table TABLE_NAME命令查看MySQL中数据表对应的引擎类型,查询结果如下所示: Table Create Table TestTable...在SpringBoot的application.properties配置文件中,加入如下一行配置即可: spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect...只有在executeSave方法执行完成跳出此方法之后,即执行到调用逻辑中return ""语句的时候,数据库中才能查询到记录。
修改完成后,只有再重新建立的连接才会使用到新的权限设置。 建立连接的过程通常是比较复杂的,所以我建议你在使用中要尽量减少建立连接的动作,也就是尽量使用长连接。...如果缓存 key 被命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。...优化器 经过了分析器分析,MySQL 知道你要干啥了,在开始执行之前,还要先经过优化器的处理。...优化器的作用就是它认为的最优的执行方案去执行(虽然有时候也不是最优),比如多个索引的时候该如何选择索引,多表查询的时候如何选择关联顺序等。...这两种的执行逻辑结果是一样的,但是执行效率会有不同,而优化器就是决定使用哪种方案。
换言之,不同的浏览器拥有不同的user-agent信息,通过修改http请求中的user-agent信息,可以将普通的爬虫程序伪装成一个浏览器的请求,从而绕过服务器反爬虫机制中对user-agent的限制...在urllib模块中,可以在header中指定user-agent的值,实现用户代理,用法如下 headers = { 'User-Agent': 'Mozilla/5.0 (Windows...,当我们能够在浏览器中访问到对应的页面,通过简单的爬取却访问不到时,可以判断,服务器对user-agent进行了限制。...中添加用户代理,可以突破服务器对于爬虫的第一重封锁,是编写爬虫的第一个基础技巧。...不同操作系统,不同浏览器具有不同的user-agent, 大家可以在自己的浏览器中打开对应的网页,然后通过调试工具来查看具体的user-agent信息。
在Web应用程序开发中,记录用户操作日志是一项非常重要的任务。它可以帮助我们追踪用户行为,分析系统状况,以及审计系统的安全性。本文将介绍如何在SpringBoot框架中实现用户操作日志的记录功能。...使用AOP(面向切面编程)AOP是一种编程范式,它允许我们在不修改现有代码的情况下,增加新的功能或修改现有功能。...在SpringBoot中,我们可以使用AOP来拦截用户的操作,并在拦截的方法中添加日志记录逻辑。...*;import javax.servlet.http.HttpServletRequest;import java.io.IOException;import java.util.Enumeration...总结本文介绍了两种在SpringBoot中记录用户操作日志的方法:使用AOP和使用过滤器。你可以根据项目的实际需求选择合适的方法。
WHERE IF(条件, true执行条件, false执行条件) 业务需求: 查询SUPPLIER_CLASS=0 and tp1.`TYPE_FLAG...
接触过MySQL的小伙伴们都知道,在Windows下安装MySQL是一件让人十分头大的事情,但是在Ubuntu等其他Linux系统中安装MySQL就简单很多了,具体的教程如下。...1、在Ubuntu的命令行中输入MySQL安装命令“sudo apt-get install mysql-server”,如下图所示。 ? 2、MySQL安装进行中,等待安装完成。 ?...可以看到mysql已经启动,并且在左侧可以看到mysql的进程号为6391。...8、mysql启动完成之后,可以在命令行中输入命令:mysql –u root –p,之后输入之前设置的密码,即可进入到MySQL数据库。 ?...至此,在Ubuntu中安装MySQL就已经完成了,小伙伴们有没有觉得比Windows下的MySQL安装更简单呢? --- End ---
本文已收录《Java常见面试题》:https://gitee.com/mydb/interview 方法重载是指在同一个类中,定义了多个同名方法,但每个方法的参数类型或者是参数个数不同就是方法重载...方法签名是由:方法名称 + 参数类型 + 参数个数组成的一个唯一值,这个唯一值就是方法签名,而 JVM(Java 虚拟机)就是通过这个方法签名来决定调用哪个方法的。...从方法签名的组成规则我们可以看出,方法的返回类型不是方法签名的组成部分,所以当同一个类中出现了多个方法名和参数相同,但返回值类型不同的方法时,JVM 就没办法通过方法签名来判断到底要调用哪个方法了,如下图所示...匹配原则5:可变参数匹配 最后将代码中的方法删除的只剩一个可选参数,实现代码如下: public class OverloadExample { public static void main(...总结 在同一个类中定义了多个同名方法,但每个方法的参数类型或者是参数个数不同就是方法重载。方法重载的典型使用场景是 String 中的 valueOf 方法,它有 9 种实现。
公共接口/** * 公共接口 */public interface Function { /** * 要做的事情 */ void invoke();}代替if else和switch...的方法/** * 代替'if else' 和 'switch'的方法 */public class IfFunction { private Map map;...> map) { this.map = map; } /** * 添加条件 * * @param key 需要验证的条件(key) *...* 否则将执行默认方法 * * @param key 需要验证的条件(key) * @param defaultFunction 要执行的方法 *...] args) { IfFunction ifFunction = new IfFunction(new HashMap(5)); //定义好要判断的条件和对应执行的方法
一、类加载 在JVM中并不是一次性把所有的文件都加载到,而是一步一步的,按照需要来加载。 比如JVM启动时,会通过不同的类加载器加载不同的类。...当用户在自己的代码中,需要某些额外的类时,再通过加载机制加载到JVM中,并且存放一段时间,便于频繁使用。 因此使用哪种类加载器、在什么位置加载类都是JVM中重要的知识。...需要注意的是,不同的类加载器加载的类是不同的,因此如果用户加载器1加载的某个类,其他用户并不能够使用。...三、Tomcat类加载 在Tomcat中类的加载稍有不同,如下图: ?...通过这样,我们就可以简单的把Java文件放置在src文件夹中,通过对该Java文件的修改以及调试,便于学习拥有源码Java文件、却没有打包成xxx-source的jar包。
1、点击[编辑区] 2、点击[L] 3、点击[dvi pdf]
NullObject模式首次发表在“ 程序设计模式语言 ”系列丛书中。一般的,在面向对象语言中,对对象的调用前需要使用判空检查,来判断这些对象是否为空,因为在空引用上无法调用所需方法。 ...4 示例代码如下(命名来自网络,哈哈到底是有多懒): Nullable是空对象的相关操作接口,用于确定对象是否为空,因为在空对象模式中,对象为空会被包装成一个Object,成为Null Object...那么如何来获得这款插件呢? 安装方式 可以直接通过IDEA的Preferences中的Plugins仓库进行安装。 ...7 Optional 还有一种方式是使用Java8特性中的Optional来进行优雅地判空,Optional来自官方的介绍如下: A container object which may or may...毕竟Optional在现在还并没有像RxJava那样流行,它还拥有一定的局限性。 如果直接使用Java8中的Optional,需要保证安卓API级别在24及以上。 ?
领取专属 10元无门槛券
手把手带您无忧上云