java面试
java面试java基础面试题java基础类型总共有8种,分别是
byte、bool、char、short、int、long、float、double
面向过程是什么面向过程是分析解决问题的步骤,然后用函数把这些步骤一步一步实现,然后再使用的过程中一一调用即可,性能较高
面向对象是什么把构成问题的事务分解成各个对象,而建立对象的目的不是为了完成一个一个步骤,而是为了描述某个事物再解决某个问题中发生的行为,所以衍生出面向对象的三个特性,封装、继承、多态,所以易维护、易复用、易扩展。容易设计出低耦合的系统,但是他的性能肯定比面向对象要低。
重写和重载的区别重写主要是子类重写父类的方法,方法名、返回值、方法参数必须相同,访问修饰符一定要大于重写的访问修饰符
重载相同的方法名,不是的参数是重载,返回类型可相同也可以不相同
什么是内部类在java中,可以将一个类定义在另一个类中,分为成员内部类,匿名内部类、局部内部类、静态内部类
HashCode的作用java集合有两类,list和set,前者可以重复,后者不可以重复,那么怎么去判断是否重复,就需要使用equals方法,但是每次都使用这个方法, ...
react前端学习日志
前言后端没问题,需要用前端框架实现一些页面
安装环境nodejs就不说了,安装最新的稳定版本就行,直接安装一个脚手架
1npm install -g create-react-app
通过脚手架生成react项目,后面跟着项目名称,时间有点长,等待完成就行
1create-react-app my-app
最后会提示我们cd项目名称,在使用npm start命令进去启动项目
我们照做,启动项目,会自动跳到浏览器访问http://localhost:3000/,这是脚手架自带的页面逻辑,我们不需要。
所以,删除掉新项目中 src/ 文件夹下的所有文件。删除后会提示
这个index.js被我们删了,我们重新创建一个,这个是入口的js,既然是入口的js,那需要引入react依赖
12import React from 'react';import ReactDom from 'react-dom'
React:这个是react核心
react-dom:这个react进行dom操作的抽象模块
其实,感觉react像是个java,思想就是抽象 ...
nacos配置和设置
前言nacos是目前的趋势,是应该研究一下,昨天因为某些原因,研究了一下配置,特定写个博客记录下,不含搭建方法等,只讲逻辑和配置
他是什么首先要明白nacos是什么,看官网:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
总结就是管理项目配置和微服务的,这里不说nacos各种的概念,没必要,讲讲在项目中的应用。
配置中心我们可以把配置放在nacos上面,然后配过配置,去nacos拉取配置,然后所有的配置都可以在nacos上。
首先,导入pom依赖
1234<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config< ...
spring业务事务使用中的坑
前言spring事务还是要单独拿起来说,大部分的开发使用都是用@Transactional去控制事物,有经验的会加上参数rollbackFor = Exception.class,正常情况下不会出问题,但是结合某种特殊的业务场景下就会出现不可预知的bug。
怎么说呢?有这样一个业务场景:我们需要向某个公司去同步数据,同步完成以后,修改表里的字段push_status为1,代表这条数据已经同步过了。正常的思路,就是查出数据、组装符合接口的数据、请求同步接口、修改字段,然后在方法上加一个事物注解,就结束了。
但是,这里会有个坑!具体什么坑看下面模拟
模拟业务这里为了更好的说明这个坑,所以模拟业务,然后需要准备一些东西
准备新建个测试表,这里随便创建一个接
123CREATE TABLE `test` ( `id` varchar(100) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
新建模拟接口
新建service层,进行dao层插入操作,这里的100次循环,我们模拟需要同步的数据,通过syncDataRequest模拟同步过去 ...
algorithm-前缀合和等概率算法
前言对java的Math.random()函数分析,从而初识对数器的概念。
热身题目有这么一个需求,对一个整形数组a位置到b位置求和,并且需求量很大,一秒几万次的那种,这么时候明显,单纯的循环运算方法已经没法满足这么多次的请求,性能太差了。所以,我们可以算出来啊,直接取数据就完事了啊,很抽象?举例!
解决思路假设,有一个数组是
1[1 6 -1 9 7 8]
我们抽象出一个正方形,他有x y 轴 ,并且x y 轴的数据对应的是这个数组数据,我么你只需要以y轴主,填数据是x y轴相加的值即可,直接抽象
看上图,是有点抽象。。。但是大致意思写出来了。直接解释就是,外面的是数组角标,里面是对应的值,我们逻辑走一遍。
0->0=1,0->1=7,0->2=6….0->5=30
1->0不存在,1->1=6…1->5=29
…
下面我就不写了很好理解,就等于把所有可能性都算出来,存下来,如果要用直接取就行。
那么,怎么去实现了,其实很好理解,这个玩意就是二维数据,我们直接写代码,看如何加载的
12345678910111213141516171819 ...
hook逆向安卓app提供签名api
前言好久没写博客了,最近研究了nacos写了一点项目,本想写上博客了,实在是太懒了,最近,研究了怎么破解某电商app,因为用的工具和方法实在不熟悉,所以还是写上记录上吧!
准备环境安装fridafrida是hook用的超吊的工具类,不过是python工具包,怎么安装python的就不演示了,直接安装
1pip install frida
安装frida工具包
1pip install frida-tools
查看版本,验证是否安装成功,记住这个版本非常重要
12C:\Users\12736>frida --version15.1.12
好了,工具安装完成,接下来需要安装安卓frida驱动
安装安卓环境因为,我们是hook安卓手机,所以安卓手机需要安装一个驱动,并执行,主要安卓手机必须root。我们去githup下载–>
https://github.com/frida/frida/releases,网页搜索server,注意,看到版本没,这里的版本要和你python安装的版本一致
找到自己的安装手机架构下载解压,使用adb push到安卓手机/data/local/ ...
MDC日志调用链工具
MDC是干什么的他是在多线程下追踪日志的工具,我们都知道日志的组成基本都是,由时间、线程名、类package组成的。当一个请求进来的时候,打印的日志是一套类的调用链。这个并没有问题,但是多线程的情况下日志会乱,我们需要根据特有的线程名标识也是能找到请求所对应的日志,但是spring的请求线程是复用的,也就是说多线程的情况下,日志线程名称是重复的,所以需要一个标识去标识日志,代表这个日志是这次调用的日志,我们只需要grep即可。这个线程并不复杂,我这边生成一个uuid,设置日志的时候设置一下不就好了吗?没错,很简单!但是太麻烦了,我们 需要一个无侵入式的东西。于是,MDC就出来了。
MDC怎么做的他的实现很简单,只需要在xml设置日志格式为
1<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %thread | [%X{X-B3-TraceId}] | %-5level %logger{50} %msg%n</pattern>
然后再加个切点即可
12345678910111 ...
多线程与高并发
基础的概念什么是线程一条程序里,不同的执行路径,就是线程
什么是进程一条程序的最小执行单元
启动线程的三种方式
new Thread
继承runnable
线程池
线程的基础方法睡眠当前线程睡眠x毫秒
1Thread.sleep(5000)
让出cpu当前线程让出cpu执行,返回就绪状态
1Thread.yield()
等待其他线程执行就是线程2方法,等待线程1方法执行完在执行
1t1.join()
线程状态大致分为五个状态
New:一个线程对象刚刚创建的状态
Runnale:就绪状态,一个线程创建后,其他线程调用start()方法,变为就绪状态。该线程位于可运行线程池,只需等待获取CPU的使用权。
Running:运行状态,就绪状态线程获得CPU使用权,开始执行代码。
Blocked:阻塞状态,因为某些原因,让出cpu使用权。直到变为就绪状态,才有机会成运行状态。阻塞状态又分为三种
同步阻塞:运行线程获取同步锁的时候,若该锁被其他线程持有,则JVM会把该线程放入锁池中
等待阻塞:Waiting,让出cpu使用权,线程变为等待状态,该状态无法主动唤醒,只能等待其他线程调用no ...
分布式三高项目设计落地
前言每次都要写前言,其实写这个东西主要是说下为啥写这篇博客,明确一个目的,围绕着这个目的去解刨!!!所以,现在明确一个三高是啥?高性能、高可用、高并发,这个时候不能直接说解决方法,要解刨这种问题的存在,在哪个场景下演变出来的。
而所有技术依赖于什么?业务!没有业务支持的技术都是狗屁,而没有技术的业务也是狗屁,所以技术和业务是相辅相生的,我们多么牛皮的技术都是为了业务服务的。所以,从业务开始解刨三高架构的存在,更好的理解,所以在解刨三高的时候,并不需要明确的语言或,只需要说清设计的思想,思想明白了,技术的选型问题就是很简单的东西。
业务结构
java小知识总结
前言总是遇到点小问题,然后愉快的百度或者谷歌解决了,下次遇到同样的问题,因解决步骤麻烦或者解决代码太长,不好记,故开了此贴,记录下遇到如何解决问题的小技巧,和java本身的小技巧。
Maven导入本地依赖自己写的jar包,或别人的jar包给我们的时候,直接放入本地maven库,总是导入不进来,于是百度说是要安装下。
安装之前需要配置Maven环境变量,这个简单不多说了。到jar包目录下,开启cmd,输入下面命令,需要改的是
<groupId>、<artifactId>、<version>、包的名字,回车安装即可。
1mvn install:install-file -DgroupId=<groupId> -DartifactId=<artifactId> -Dversion=<version> -Dpackaging=jar -Dfile=包的名字
java启动java项目这东西就不用多说了,启动java项目的,简单说下重要的参数
-server:当JVM用于启动GUI界面的交互应用时适合于使用client模 ...