前言
最近荔枝打算再系统学习和梳理一下Java后端开发的相关知识,之前也大致了解过行业招聘要求,其实学习Java后端其实路线很多而且时间很长要求也很高,但基本上都需要从Javase开始学起,然后学J2EE、spring、SSM框架开发,学完后才能学到SpringBoot,当然了如果涉及微服务的话就再加上一个Spring Cloud。除了这些,还需要深入学习数据库比如MySQL,学习一些中间件如redis、kafka等以及各自在实际开发中的使用。在求职的时候其实有些公司对分布式有要求,所以可能还得学k8s、Docker。感觉光是理论知识的学习就需要大半年了哈哈哈,Java后端实在是太卷了。。。在这篇文章中,荔枝就着重梳理一下有关于Javase的知识吧,系统再学一遍。
文章目录
前言
一、包、类和对象
1.1 基本概念
1.2 面向对象三大特性
1.2.1 封装性
1.2.2 继承性
1.2.3 多态性
1.3 组合和继承的区分
1.4 向上转型和向下转型
1.5 抽象类和接口
1.6 枚举类enum
1.7 内部类
二、泛型和泛型类
2.1 主要特性和用途
2.2 泛型常见使用场景
2.3 泛型类
2.4 泛型接口
2.5 泛型方法
2.6 泛型通配符
总结
一、包、类和对象
1.1 基本概念
包
为了更好的组织类,Java提供了包机制,用以创建新的命名空间并加以区别类名的命名空间。一般可以通过package ...来声明一个包的创建,import ...来导入包。
类和对象
Java是一门面向对象的语言,对象是类的一个实例,有着独特的属性和行为;类则是一个模板,代表着一类对象的共有特性。在使用类的时候我们需要对类进行实例化并得到一个实例化对象。每个类的内部都有构造方法,如果没有显式定义类构造方法,Java编译器会自动为类隐式定义构造方法。
//类的构造方法
class Test{
//无参构造方法
public Test(){
}
//有参构造方法
public Test(int id){
}
}
public class TestRun{
//实例化对象并调用其有参构造方法
public static void main(String[] args){
Test test = new Test(1);
}
}
1.2 面向对象三大特性
1.2.1 封装性
面向对象中的封装是指将抽象函式接口的实现细节进行封装隐藏,可以是做是在外围多了一层保护膜,要访问该类的话必须要通过一个严格的接口控制,防止该类的代码和数据被外部类定义的代码随机访问。具体的封装实现是对类中的属性进行private关键字修饰,并在对外提供的方法中可能会放开对公共属性的访问和修改。
//类的构造方法
public class Test{
//私有属性
private String name;
private int id;
//对外访问接口
public setName(name){
this.name = name;
}
}
1.2.2 继承性
继承关系是面向对象中的一个最为重要的特性,通过继承和重写方法使得我们的类可以实现功能的延拓。继承的过程主要有几种:子类继承父类、子类继承接口并重写。我们首先来看看子类继承父类并重写父类方法的代码示例。
class Animal{
int age;
String name;
public void setName(String name){
this.name = name;
System.out.println(name);
}
public void move(){
System.out.println("可以移动");
}
}
//继承示例
class Pandas extends Animal{
public void move(){
super.move(); // 应用super类的方法
System.out.println("可以跑和走");
}
public void bark(){
System.out.println("咆哮了");
}
public void myName(String name){
super.setName(name);
System.out.println("I want to paly with "+ name);
}
}
public class test{
public static void main(String args[]){
Pandas b = new Pandas(); // Pandas 对象
b.move(); //执行 Pandas类的方法
b.bark();
b.myName("花花");
}
}
可以看到上面的子类Pandas继承并对myName方法进行重写,同时在myName使用super()继承父类的setName方法并对重写该方法。在Java中子类使用extends关键字后会默认调用父类的非参构造器,但若是想要操作父类的有参构造器或者调用父类被重写方法和属性时必须使用super() ,而关键字this可以操作当前类的方法。接着看看继承多个接口类时的代码示例:
public interface A {
public void eat();
public void sleep();
}
public interface B {
public void show();
}
public class C implements A,B {
}
需要注意的是Java中的继承是不能一个子类继承多个类的 ,Java中支持单继承和多重继承,但是使用extends是不支持同时继承两个类的。但是,对于接口的继承和重写来说,通过implements关键字却可以实现多继承。
1.2.3 多态性
多态性是指一个模板类通过子类继承的方式使得实例化对象有着多种表现形式。多态的使用可以消除类型之间的耦合关系,同时也使得对象的使用更加灵活。相比起继承,多态相对来说更加抽象,其实堕胎的过程就是一个向上转型的过程,即父类引用指向子类实例对象。对于子类来说,向上转型中,执行了方法重写后,如果不使用super方法的话调用的是子类自己的重写方法。
我们再用上面的例子来改写多态:
class Animal{
int age;
String name;
public void setName(String name){
this.name = name;
System.out.println(name);
}
public void move(){
System.out.println("可以移动");
}
}
//继承示例
class Pandas extends Animal{
public void move(){
super.move(); // 应用super类的方法
System.out.println("可以跑和走");
}
public void bark(){
System.out.println("咆哮了");
}
public void myName(String name){
super.setName(name);
System.out.println("I want to paly with "+ name);
}
}
public class test{
public static void main(String args[]){
Animal b = new Pandas(); // Pandas 对象
b.move();//可以移动、可以跑和走
b.bark();//会报错
}
}
多态存在的三个必要条件:继承、重写、父类引用指向子类对象。
1.3 组合和继承的区分
组合和继承是不同的,组合指的是在一个类中使用另一个类的实例对象,是一种包括的关系;另外一种是继承重写的关系。使用组合的关系能够降低类之间的耦合性。
// Person类
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
// Employee类使用Person类的对象作为成员变量,实现组合关系
class Employee {
private Person person;
private String employeeId;
public Employee(String name, String employeeId) {
this.person = new Person(name);
this.employeeId = employeeId;
}
public String getName() {
return person.getName();
}
public String getEmployeeId() {
return employeeId;
}
}
1.4 向上转型和向下转型
向上转型(Upcasting)和向下转型(Downcasting)是Java中多态性的一种体现,它们用于处理对象之间的类型转换。
向上转型:
向上转型是将一个子类对象转换为父类类型的过程。也就是说,将子类对象赋值给父类引用变量。
向上转型是自动完成的,不需要进行显式的类型转换。
向上转型发生在类的继承关系中,它允许子类对象被视为父类对象,只能访问父类中定义的成员。
向上转型是安全的,因为子类对象包含了父类的所有特性。
class Animal {
public void makeSound() {
System.out.println("动物发出声音");
}
}
class Dog extends Animal {
public void makeSound() {
System.out.println("狗发出汪汪声");
}
public void fetch() {
System.out.println("狗在玩飞盘");
}
}
public class Main {
public static void main(String[] args) {
// 向上转型
Animal animal = new Dog();
animal.makeSound(); // 输出:"狗发出汪汪声"
// animal.fetch(); // 编译错误,不能访问子类特有的方法
}
}
向下转型:
向下转型是将一个父类对象转换为子类类型的过程。也就是说,将父类对象赋值给子类引用变量。
向下转型需要进行显式的类型转换,因为编译器不能确定父类对象是否真的是子类对象。
向下转型发生在类的继承关系中,它允许父类对象重新被视为子类对象,可以访问子类中定义的特有成员。
向下转型是不安全的,如果在运行时出现了不匹配的对象类型,会导致ClassCastException
异常。
class Animal {
public void makeSound() {
System.out.println("动物发出声音");
}
}
class Dog extends Animal {
public void makeSound() {
System.out.println("狗发出汪汪声");
}
public void fetch() {
System.out.println("狗在玩飞盘");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(); // 向上转型
// 向下转型,需要进行显式的类型转换
if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.fetch(); // 输出:"狗在玩飞盘"
} else {
System.out.println("对象不是Dog类型");
}
}
}
1.5 抽象类和接口
抽象类(一般用abstract来声明)除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。介绍到这里大家是不是感觉抽象类和接口有点类似?其实二者很类似,接口也是一种抽象类型不能直接被实例化,但是相比之下抽象类只能被一个子类继承并且该子类只能继承一个抽象类;而子类却可以同时继承多个接口 ,这就是二者最大区别,同时抽象类中可以允许有方法体,但是接口中不被允许出现实现方法的具体功能;抽象类中的成员变量可以是各种类型的但是接口的成员变量就只能是public static final类型。
方法重写和方法重载的区别
方法重写主要发生在子类继承父类的时候使用super对父类构造方法进行继承并对方法进行重写;而方法重载是指在一个类对象中对同一命名的构造方法有不同参数对应的处理方法体。在调用的时候主要是根据传入的参数的类型来判断不同的构造方法。
1.6 枚举类enum
Java中为我们给出了枚举类这种特殊的类,通常表示一组常量比如像颜色的枚举、地点的枚举等等。枚举类既可以在类的外部使用,也可以在类的内部使用。enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum类中
values() 返回枚举类中所有的值。
ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
valueOf()方法返回指定字符串值的枚举常量。
enum Color
{
RED, GREEN, BLUE;
}
public class MyClass {
public static void main(String[] args) {
for (Color myVar : Color.values()) {
System.out.println(myVar);
}
}
}
1.7 内部类
Java中的内部类(Inner Class)是指一个类定义在另一个类的内部。它允许在一个类中定义另一个类,使得这两个类具有一定的关联关系。内部类的定义在外部类的大括号内,可以访问外部类的成员,包括私有成员,而外部类也可以访问内部类的成员。
内部类的分类
成员内部类 (Member Inner Class):成员内部类是定义在外部类的成员位置(字段、方法)的类。它持有一个对外部类的引用,可以直接访问外部类的成员。
静态内部类 (Static Inner Class):静态内部类是定义在外部类的成员位置,但使用static
修饰的类。它与外部类的实例无关,可以直接访问外部类的静态成员,但不能直接访问非静态成员。
局部内部类 (Local Inner Class):局部内部类是定义在方法内部的类 。它只在所在方法中有效,不能有访问修饰符,也不能使用static
修饰。
匿名内部类 (Anonymous Inner Class):匿名内部类是没有名字的内部类,它是一种简化的内部类形式。通常在创建接口或抽象类的对象时使用,直接定义并实例化一个没有类名的内部类对象。
主要特点和用途
内部类提供了更好的封装性和隐藏性,可以将相关的类组织在一起,使代码结构更加清晰。
内部类可以直接访问外部类的私有成员,可以用来实现一些辅助功能。
成员内部类和静态内部类可以用来实现多重继承的效果,一个类可以拥有多个内部类。
局部内部类和匿名内部类通常用于简化代码,避免定义额外的类。
public class OuterClass {
private int outerField;
public void outerMethod() {
System.out.println("Outer method");
}
// 成员内部类
public class InnerClass {
public void innerMethod() {
outerField = 10; // 可以访问外部类的成员
outerMethod(); // 可以调用外部类的方法
System.out.println("Inner method");
}
}
// 静态内部类
public static class StaticInnerClass {
public void staticInnerMethod() {
System.out.println("Static inner method");
}
}
}
二、泛型和泛型类
在Java中,泛型(Generics)是一种编程机制仅在编译阶段使用,允许在类、接口和方法的定义中使用类型参数,以便在使用时指定具体的类型。泛型的引入使得代码更加通用、安全和可读,同时避免了类型转换的麻烦。
2.1 主要特性和用途
类型参数:使用尖括号< >来定义类型参数,可以在类、接口或方法的定义中声明泛型类型。
类型安全:通过使用泛型,编译器在编译时会进行类型检查,确保只有兼容的类型被传入泛型类或方法,从而避免运行时的类型转换异常。
代码复用:泛型允许编写通用的代码,可以在不同的数据类型上重复使用相同的代码逻辑。
避免强制类型转换:使用泛型可以避免在代码中频繁进行强制类型转换,使代码更简洁。
2.2 泛型常见使用场景
集合类:Java的集合框架中的List
、Set
、Map
等接口和实现类都使用了泛型来定义容器中存储的元素类型,使得集合类能够在编译时进行类型检查,避免了在运行时出现类型转换异常。
泛型约束:在泛型中可以使用通配符和限定来对类型进行约束,例如使用extends
关键字限定
泛型类型必须是某个类的子类,或者使用super
关键字限定泛型类型必须是某个类的父类。泛型类继承:可以在泛型类中使用继承关系,实现一个泛型类继承另一个泛型类,以提供更多的功能和灵活性。
泛型通配符: 在需要处理未知类型的情况下,可以使用通配符来表示不确定的类型,从而实现更通用的代码。
2.3 泛型类
// 定义一个泛型类
class Box {
private T value;
public Box(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
public class Main {
public static void main(String[] args) {
// 创建一个存储整数的Box对象
Box intBox = new Box<>(10);
int value = intBox.getValue();
System.out.println("Value: " + value);
// 创建一个存储字符串的Box对象
Box strBox = new Box<>("Hello, Generics!");
String message = strBox.getValue();
System.out.println("Message: " + message);
}
}
如果写成如下形式实例化对象的时候传入的参数和得到的参数都是一个Object对象。
Box b = new Box();
总的来说,泛型是Java中一种强大的特性,通过类型参数化实现了通用编程,使代码更灵活、类型安全,并提高代码的可读性和复用性。
2.4 泛型接口
定义一个泛型接口
interface IFF{
T test(T t);
}
定义一个接口实现类
class B implements IFF{
@Override
public T test(T t){
return null;
}
}
未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中。如果实现接口时指定接口的泛型的具体数据类型,这个类实现接口所有方法的位置都要泛型替换实际的具体数据类型
public class Testl{
public static void main(String[]args){
Bl bl = new Bl();
Bl b2 = new Bl();
B2 b3 = new B2();
}
}
//未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中
class B1 implements IFF{...}
//如果实现接口时指定接口的泛型的具体数据类型,这个类实现接口所有方法的位置都要泛型替换实际的具体数据类型
class B2 implements IFF{
@overwide
public String test(String t){
return null;
}
}
2.5 泛型方法
class C1{
private E e;
//无返回值的泛型方法
public void test(T s){
T t = s;
//在类上定义的泛型,可以在普通的方法中使用,但是在静态的方法中不能使用类的泛型。
System.out.println(this.e);
}
//有返回值的泛型方法
public T test1(T s){
return s;
}
//可变参数类型的泛型方法
public void test2(T... strs){
for(T s : strs){
System.out.println(s);
}
}
}
需要注意的是:如果泛型方法在调用之前没有固定的数据类型,那么在调用时传入参数是什么类型,就会把泛型改成什么类型,也就是说泛型方法会在调用时确定泛型具体的数据类型。
2.6 泛型通配符
class Dd(
//test方法需要一个1ist集合的参数,不确定1i3t集合到底是存的数的类型是什么
public void test(List 1ist){}
//1i3t参数的元素数据类型是c1及其子类
public void test1(List 1ist){}
//1ist参数的元素数据类型是c1及其父类
public void test2(List 1ist){}
}
总结
在这篇文章中,荔枝主要把Java中有关类和对象、泛型和泛型类的知识梳理了一下,有些地方感觉文字讲不清楚荔枝也用简单的demo来示例辅助理解,希望能帮助到有需要的小伙伴。不知道现在复习的知识什么时候能用上,什么时候被遗忘,总之尽量保证记得清楚一点吧哈哈哈。最近荔枝确实有点懈怠了,大家不要像荔枝一样噢~~~
今朝已然成为过去,明日依然向往未来!我是小荔枝,在技术成长的路上与你相伴,码文不易,麻烦举起小爪爪点个赞吧哈哈哈~~~ 比心心♥~~~
你可能感兴趣的:(Java开发,java,Javase,面向对象)
windows安装jdk
weixin_33955681
java
应用场景在windows系统环境中,如果需要运行java,开发java的环境,那么就需要在电脑上安装jdk【又称为,java的运行开发环境】,很多第三方软件都需要使用到jdk,比如tomcat,eclipse,等等,所以安装jdk,可能是安装很多软件的第一步!资源下载jdk1.7下载jdk1.7下载地址jdk1.8下载jdk1.8下载地址安装步骤安装过程十分简单,双击下载的exe可执行文件安装完毕
计算机网络——TCP / IP 网络模型
确定吗阿斌
网络 计算机网络 tcp/ip
OSI七层模型七层模型是国际标准化的一个网络分层模型,大体结构可以分成七层。每层提供不同的功能。图片来源JavaGuide但是这样七层结构比较复杂,不太实用,所以有了TCP/IP模型。TCP/IP网络模型TCP/IP网络模型可以看作是OSI模型的简化版本。它将OSI网络模型合并成了4层结构。应用层、表示层、会话层统一被合并成了应用层。传输层和网络层没有变化,数据链路层和物理层合并成了物理链路层/网
Github 仓库 git clone 速度过慢解决方案
事业运财运爆棚
github
很多时候想从GitHub上clone一个仓库,都会遇到速度慢的问题,而且经常连接失败,这里给出有效解决方案。一、背景应该是很多小伙伴碰到过的问题:想从GitHub上面clone项目,很多情况下会慢的离谱,等待好久后报错:代码语言:javascript代码运行次数:0复制CloudStudio代码运行fatal:earlyEOFfatal:theremoteendhungupunexpectedly
Java必知必会系列:RESTful API与Web服务
AI天才研究院
AI实战 DeepSeek R1 & 大数据AI人工智能大模型 Python实战 大数据 人工智能 语言模型 Java Python 架构设计
文章目录1.背景介绍RESTfulAPI与Web服务什么是RESTful?为什么要用RESTfulAPI?Web服务架构1.客户端–服务器体系结构2.无状态3.明确的角色4.使用合适的HTTP方法5.支持缓存6.使用链接关系代替非自描述信息7.异步处理RESTfulAPI框架SpringMVCRubyonRailsDjangoRestFramework如何利用框架开发RESTfulAPI创建项目创
Kotlin DSL(Domain-Specific Language,领域特定语言)
tangweiguo03051987
kotlin python 开发语言
DSL(Domain-SpecificLanguage,领域特定语言)是一种专门为某个特定领域设计的编程语言。与通用编程语言(如Java、Kotlin等)相比,DSL通常具有更简洁的语法和更少的语法元素,这使得它更适合用于描述特定领域的概念和操作。在Kotlin中,DSL可以以多种方式实现,例如使用函数式编程、使用扩展函数、使用中缀表达式等。以下是实现DSL的示例://使用函数式编程funbuil
Java反射
qq_65860758
java 开发语言
Java反射:深入探索与实战应用在Java编程的世界里,反射(Reflection)是一种强大的机制,它允许程序在运行时检查、修改和操作自身的结构和行为。通过反射,你可以动态地获取类的属性、方法、构造函数等信息,甚至可以调用私有方法和访问私有字段。这种能力在框架开发、依赖注入、测试工具等场景中尤为重要。本文将带你深入了解Java反射的工作原理、基本用法以及实战应用。一、反射的基本概念反射的核心在于
基于JavaWeb开发的Java+SpringBoot+vue+element实现前后端分离玩具商城系统
网顺技术团队
成品程序项目 spring boot 开发语言 课程设计 java vue.js
基于JavaWeb开发的Java+SpringBoot+vue+element实现前后端分离玩具商城系统作者主页网顺技术团队欢迎点赞收藏⭐留言文末获取源码联系方式查看下方微信号获取联系方式承接各种定制系统精彩系列推荐精彩专栏推荐订阅不然下次找不到哟Java毕设项目精品实战案例《1000套》感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人文章
SpringBoot配置文件的优先级(保姆级超详细讲解)
来杯@Java
spring boot python 后端
文章目录配置优先级排序项目外部配置文件项目内部配置文件Bootstrap配置文件配置优先级排序命令行参数;java:comp/env的JNDI属性(当前J2EE应用的环境);JAVA系统的环境属性;操作系统的环境变量;JAR包外部的application-xxx.properties或application-xxx.yml配置文件;JAR包内部的application-xxx.properties
Java实现向MySQL数据库批量更新数据的常见方法
来杯@Java
数据库 java mysql
文章目录一、IN二、For+Update三、insertinto...onduplicatekeyupdate四、replaceinto五、set...case...when...where六、创建临时表案例一、IN第一种方式是借助IN语句,这种方式局限性较大,更新结果必须一致,比如下面就是将满足条件的行的状态(status)都置为1。如果是一部分置为1,一部分置为2等,则无法实现,要么就是写多条
Java实现Word文档转换为PDF详解
一休哥助手
工具 java java word pdf
目录引言为什么要将Word转换为PDF实现方式概述使用ApachePOI和iTextApachePOI简介iText简介安装依赖代码实现
java练习(46)
IIIIIIlllii
算法 数据结构 java
ps:题目来自力扣四数之和给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组[nums[a],nums[b],nums[c],nums[d]](若两个四元组元素一一对应,则认为两个四元组重复):0>fourSum(int[]nums,inttarget){List>result=newArrayList0&&nums[i]==nums[i
网络安全:攻击和防御练习(全战课), DDos压力测试
网安-轩逸
web安全 ddos okhttp
XSS跨站脚本攻击:Cross-sitescripting(简称xss)跨站脚本。一种网站的安全漏洞的攻击,代码注入攻击的一种。XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。
【Java数据结构】哈希表
回响N
数据结构 散列表 哈希算法
哈希表1.哈希表哈希散列(散列表):不经过任何比较,一次直接从表中得到要搜索的元素,时间复杂度是O(1)。哈希函数的设置hash(key)=key%capacity,capacity是存储元素底层空间总的大小。2.哈希冲突当数据集合中可能存在多个数据都被插在一块区域,如上面例题23和3取模后都放在了数组下标3的位置,这是就存在冲突,也就被称为哈希冲突。冲突的解决方法:避免冲突、解决冲突。3.避免冲
推荐算法工程师的技术图谱和学习路径
执于代码
开发者职业加速服务 推荐算法 学习 算法
推荐算法工程师的技术图谱和学习路径可以从多个维度进行概述,可以总结如下:一、技术图谱推荐算法工程师需要掌握的技术栈主要分为以下几个方面:数学基础:微积分、线性代数、概率论与统计学是推荐算法的基础,用于理解模型的数学原理和优化算法。高等数学、最优化理论、几何和图论等知识对于复杂模型的设计和优化至关重要。编程与数据结构:熟练掌握Python、Java等编程语言,具备良好的编程习惯和代码优化能力。掌握数
Android15 am命令 APP安装流程
惠(xi)斌
python 开发语言
一.PM安装命令使用命令pminstall-rxxx.apkpm命令安装app会触发PackageManagerShellCommand中runInstall()方法frameworks/base/services/core/java/com/android/server/pm/PackageManagerShellCommand.java1.onCommand函数:publicintonComm
Java和C++的区别有哪些?
javac++
语言特性编译与运行机制Java:是一种半编译半解释型的语言。Java源代码(.java文件)首先通过编译器(如javac)编译成字节码文件(.class文件),字节码是一种中间形式,不直接对应特定硬件平台的机器码。然后,Java虚拟机(JVM)负责解释执行字节码,使得Java程序具有“一次编写,到处运行”的跨平台特性。C++:是编译型语言。C++源代码经过编译器(如GCC、Clang等)直接编译成
build.gradle文件generateProtoTasks含义
天若子
android
在Android项目的build.gradle文件中,generateProtoTasks通常与使用ProtocolBuffers(Protobuf)进行代码生成相关,下面为你详细解释其含义和作用。整体背景ProtocolBuffers是一种用于序列化结构化数据的高效机制,在Android和Java项目中,我们通常会定义.proto文件来描述数据结构,然后使用Protobuf编译器根据这些.pro
初识React,基础(1), 安装react,jsx文件,类组件和函数组件,css样式
ybilss
react react.js 前端 前端框架
第一部分:初识reactreact:用于构建用户界面的JavaScript库全局安装,win+r,命令:npminstallcreate-react-app-g3.创建一个react应用,这里我在vscode里面创建,创建之后,运行create-react-appmy-appcdmy-appnpmstart第二部分:redact组件定义以及使用react中组件分为两种:类组件和函数组件,一般使用是
默默的学python——变量
xiaoli_panpan
# python基础 python 开发语言 linux
一、Python的变量定义在Python中,变量(variable)的定义其实是一种更宽松的概念,与其他一些编程语言(如C、Java等)有所不同。在Python中,当你为某个东西(例如一个值、一个对象、一个数据结构等)赋予一个名字时,你就创建了一个变量。因此,我们不难得知:变量(variable)是表示(或指向)特定值的名称。Python的变量定义有几个关键点:1、动态类型:Python是一种动态
Android.bp在安卓项目中的构建
wydaicls
Android 代码学习 android
Android.bp是Android构建系统的一部分,主要用于描述模块和它们之间的依赖关系。它使用一种名为Blueprint的DSL(领域特定语言)来定义模块的属性和行为,取代了之前的Android.mk文件。1.基本结构Android.bp文件的基本结构包括:模块类型:定义模块的类型,如cc_library、java_library等。属性:模块的属性,如名称、源文件、依赖关系等。2.常见模块类
SOFABoot 4.0 正式发布,多项新特性等你来体验!
Part.1「亿点点」新特性基于Java17SOFABoot4.0依赖Java17作为最小支持的JDK版本。如果你的应用目前使用Java8或11,你需要先将自己的JDK版本升级到17才能基于SOFABoot4.0进行开发。二方库升级SOFABoot4.0基于SpringBoot3.0与SpringFramework6构建。在SpringBoot3.0与SpringFramework6引入的二方库升
详解tomcat中的jmx监控
web15117360223
面试 学习路线 阿里巴巴 tomcat java
目录1.概述2.如何开启tomcat的JMX3.tomcat如何实现JMX的源码分析1.概述本文是博主JAVA监控技术系列文章的第二篇,前面一篇文章中我们介绍了JAVA监控技术的基石——jmx:【JMX】JAVA监控的基石-CSDN博客本文我们将从使用和源码实现两个方面聊一下jmx的落地实现范例——tomcat中的jmx。tomcat作为一个webserver,其选用jmx来实现监控功能。之所以选
Java如何实现大正整数相加
yava_free
java 算法 数据结构
如何实现大正整数相加题目给出两个很大的正整数,要求实现程序求出两个正整数之和。超出Java中的Long类型的范围的正整数,如何求和。思路使用到小学的数学了,对于大的数,小学老师会教,列竖式进行计算。对于,计算机,无法计算太大的数,进行加运算。我们可以将大的数,转成一个个小的整数,创建两个int[],长度是较大整数的位数+1。大整数一般是使用字符串进行存储的,倒序转化到两个整数数组中,倒叙是为了,满
《Operating System Concepts》阅读笔记:p179-p179
操作系统
《OperatingSystemConcepts》学习第19天,p179-p179总结,总计1页。一、技术总结1.Pythonthreadpool(1)示例书上介绍的是Javathreadpoo,因为本人工作中使用的编程语言是Python,所以补充一下Python中的threadpool用例。importconcurrent.futuresimporturllib.requestURLS=['ht
教你如何在Java中操作Redis
Jacky-YY
Redis java redis 开发语言
Redis的Java客户端Redis的Java客户端很多,常用的几种:Jedis:基于Java的Redis客户端,提供了Redis命令的全面支持。Lettuce:高性能的Java客户端库,用于与Redis数据库进行交互。它支持同步、异步和反应式编程模型,提供了丰富的API来操作Redis。Lettuce与Jedis并列成为最热门的RedisJava客户端之一,并且已经成为SpringBoot2.0
redis基础知识整理以及案例分析
小鹿的周先生
redis基础知识整理以及案例分析1.redis1.概念2.下载安装3.命令操作1.数据结构4.持久化操作5.使用Java客户端操作redisRedis1.概念:redis是一款高性能的NOSQL系列的非关系型数据库1.1.什么是NOSQLNoSQL(NoSQL=NotOnlySQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关
知识分享之Golang——Bleve中的Token filters各种标记过滤器
caihuayuan4
面试题汇总与解析 spring sql java 大数据 课程设计
知识分享之Golang——Bleve中的Tokenfilters各种标记过滤器背景知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。知识分享系列目前包含Java、Golang、Linux、Docker等等。开发环境系统:windows10语言:Golang组件库:Blevegolang版本:1
Java 线程必须了解的哪些事儿
知行小栈
Java 线程篇 java 开发语言
前言对于一名Java开发者,线程是一个绕不开的话题。尽管线程能有效利用系统资源,提高系统的性能,但在使用过程中也伴随不少的问题。今天,『知行』就为大家梳理一下,Java线程中必须要掌握的知识点。线程的创建方式在Java中,线程的创建方式通常有4种方式:继承Thread类,重写run()方法,这种方式受限Java的单继承,灵活性较差;实现Runnable接口,这种方式可避免继承限制,比较灵活;实现C
SpringBoot 的核心只有几张图
知行小栈
SpringBoot spring boot java 后端
前言SpringBoot是一个让所有Java开发者都又爱又恨的框架。喜欢它是因为其易用性和提供的丰富功能,而它较为复杂的设计也让许多开发者头疼不已。本期知行将会为大家带来以下内容,和大家一起梳理SpringBoot中一些较为核心的内容。SpringBoot启动流程SpringBoot的启动流程主要有以下几个核心步骤:创建启动容器:创建DefaultBootstrapContext,用于引导IOC容
Flutter学习(1)初识Flutter,微信小程序的事件处理
2401_84149765
程序员 flutter 学习 微信小程序
Flutter是Google发布的一个用于创建跨平台、高性能移动应用的框架。现在移动平台下的App,分为原生开发和混生开发,他们是这样定义的:1.原生开发一个平台,有其支持的一整套框架。比如Android平台,它有自己的语言Java、Kotlin,有自己的一整API—AndroidSDK。通过这一套框架,就能够实现一个应用开发。比如IOS平台,它有OC、Swift,通过IOSSDK来实现一个应用。
[星球大战]阿纳金的背叛
comsci
本来杰迪圣殿的长老是不同意让阿纳金接受训练的.........
但是由于政治原因,长老会妥协了...这给邪恶的力量带来了机会
所以......现代的地球联邦接受了这个教训...绝对不让某些年轻人进入学院
看懂它,你就可以任性的玩耍了!
aijuans
JavaScript
javascript作为前端开发的标配技能,如果不掌握好它的三大特点:1.原型 2.作用域 3. 闭包 ,又怎么可以说你学好了这门语言呢?如果标配的技能都没有撑握好,怎么可以任性的玩耍呢?怎么验证自己学好了以上三个基本点呢,我找到一段不错的代码,稍加改动,如果能够读懂它,那么你就可以任性了。
function jClass(b
Java常用工具包 Jodd
Kai_Ge
java jodd
Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架。简单,却很强大! 写道 Jodd = Tools + IoC + MVC + DB + AOP + TX + JSON + HTML < 1.5 Mb
Jodd 被分成众多模块,按需选择,其中
工具类模块有:
jodd-core &nb
SpringMvc下载
120153216
springMVC
@RequestMapping(value = WebUrlConstant.DOWNLOAD)
public void download(HttpServletRequest request,HttpServletResponse response,String fileName) {
OutputStream os = null;
InputStream is = null;
Python 标准异常总结
2002wmj
python
Python标准异常总结
AssertionError 断言语句(assert)失败 AttributeError 尝试访问未知的对象属性 EOFError 用户输入文件末尾标志EOF(Ctrl+d) FloatingPointError 浮点计算错误 GeneratorExit generator.close()方法被调用的时候 ImportError 导入模块失
SQL函数返回临时表结构的数据用于查询
357029540
SQL Server
这两天在做一个查询的SQL,这个SQL的一个条件是通过游标实现另外两张表查询出一个多条数据,这些数据都是INT类型,然后用IN条件进行查询,并且查询这两张表需要通过外部传入参数才能查询出所需数据,于是想到了用SQL函数返回值,并且也这样做了,由于是返回多条数据,所以把查询出来的INT类型值都拼接为了字符串,这时就遇到问题了,在查询SQL中因为条件是INT值,SQL函数的CAST和CONVERST都
java 时间格式化 | 比较大小| 时区 个人笔记
7454103
java eclipse tomcat c MyEclipse
个人总结! 不当之处多多包含!
引用 1.0 如何设置 tomcat 的时区:
位置:(catalina.bat---JAVA_OPTS 下面加上)
set JAVA_OPT
时间获取Clander的用法
adminjun
Clander 时间
/**
* 得到几天前的时间
* @param d
* @param day
* @return
*/
public static Date getDateBefore(Date d,int day){
Calend
JVM初探与设置
aijuans
java
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台
SQL中ON和WHERE的区别
avords
SQL中ON和WHERE的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 www.2cto.com 在使用left jion时,on和where条件的区别如下: 1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
说说自信
houxinyou
工作 生活
自信的来源分为两种,一种是源于实力,一种源于头脑.实力是一个综合的评定,有自身的能力,能利用的资源等.比如我想去月亮上,要身体素质过硬,还要有飞船等等一系列的东西.这些都属于实力的一部分.而头脑不同,只要你头脑够简单就可以了!同样要上月亮上,你想,我一跳,1米,我多跳几下,跳个几年,应该就到了!什么?你说我会往下掉?你笨呀你!找个东西踩一下不就行了吗?
无论工作还
WEBLOGIC事务超时设置
bijian1013
weblogic jta 事务超时
系统中统计数据,由于调用统计过程,执行时间超过了weblogic设置的时间,提示如下错误:
统计数据出错!
原因:The transaction is no longer active - status: 'Rolling Back. [Reason=weblogic.transaction.internal
两年已过去,再看该如何快速融入新团队
bingyingao
java 互联网 融入 架构 新团队
偶得的空闲,翻到了两年前的帖子
该如何快速融入一个新团队,有所感触,就记下来,为下一个两年后的今天做参考。
时隔两年半之后的今天,再来看当初的这个博客,别有一番滋味。而我已经于今年三月份离开了当初所在的团队,加入另外的一个项目组,2011年的这篇博客之后的时光,我很好的融入了那个团队,而直到现在和同事们关系都特别好。大家在短短一年半的时间离一起经历了一
【Spark七十七】Spark分析Nginx和Apache的access.log
bit1129
apache
Spark分析Nginx和Apache的access.log,第一个问题是要对Nginx和Apache的access.log文件进行按行解析,按行解析就的方法是正则表达式:
Nginx的access.log解析正则表达式
val PATTERN = """([^ ]*) ([^ ]*) ([^ ]*) (\\[.*\\]) (\&q
Erlang patch
bookjovi
erlang
Totally five patchs committed to erlang otp, just small patchs.
IMO, erlang really is a interesting programming language, I really like its concurrency feature.
but the functional programming style
log4j日志路径中加入日期
bro_feng
java log4j
要用log4j使用记录日志,日志路径有每日的日期,文件大小5M新增文件。
实现方式
log4j:
<appender name="serviceLog"
class="org.apache.log4j.RollingFileAppender">
<param name="Encoding" v
读《研磨设计模式》-代码笔记-桥接模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/**
* 个人觉得关于桥接模式的例子,蜡笔和毛笔这个例子是最贴切的:http://www.cnblogs.com/zhenyulu/articles/67016.html
* 笔和颜色是可分离的,蜡笔把两者耦合在一起了:一支蜡笔只有一种
windows7下SVN和Eclipse插件安装
chenyu19891124
eclipse插件
今天花了一天时间弄SVN和Eclipse插件的安装,今天弄好了。svn插件和Eclipse整合有两种方式,一种是直接下载插件包,二种是通过Eclipse在线更新。由于之前Eclipse版本和svn插件版本有差别,始终是没装上。最后在网上找到了适合的版本。所用的环境系统:windows7JDK:1.7svn插件包版本:1.8.16Eclipse:3.7.2工具下载地址:Eclipse下在地址:htt
[转帖]工作流引擎设计思路
comsci
设计模式 工作 应用服务器 workflow 企业应用
作为国内的同行,我非常希望在流程设计方面和大家交流,刚发现篇好文(那么好的文章,现在才发现,可惜),关于流程设计的一些原理,个人觉得本文站得高,看得远,比俺的文章有深度,转载如下
=================================================================================
自开博以来不断有朋友来探讨工作流引擎该如何
Linux 查看内存,CPU及硬盘大小的方法
daizj
linux cpu 内存 硬盘 大小
一、查看CPU信息的命令
[root@R4 ~]# cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep "physical id"
model name : Intel(R) Xeon(R) CPU X5450 @ 3.00GHz
model name :
linux 踢出在线用户
dongwei_6688
linux
两个步骤:
1.用w命令找到要踢出的用户,比如下面:
[root@localhost ~]# w
18:16:55 up 39 days, 8:27, 3 users, load average: 0.03, 0.03, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
放手吧,就像不曾拥有过一样
dcj3sjt126com
内容提要:
静悠悠编著的《放手吧就像不曾拥有过一样》集结“全球华语世界最舒缓心灵”的精华故事,触碰生命最深层次的感动,献给全世界亿万读者。《放手吧就像不曾拥有过一样》的作者衷心地祝愿每一位读者都给自己一个重新出发的理由,将那些令你痛苦的、扛起的、背负的,一并都放下吧!把憔悴的面容换做一种清淡的微笑,把沉重的步伐调节成春天五线谱上的音符,让自己踏着轻快的节奏,在人生的海面上悠然漂荡,享受宁静与
php二进制安全的含义
dcj3sjt126com
PHP
PHP里,有string的概念。
string里,每个字符的大小为byte(与PHP相比,Java的每个字符为Character,是UTF8字符,C语言的每个字符可以在编译时选择)。
byte里,有ASCII代码的字符,例如ABC,123,abc,也有一些特殊字符,例如回车,退格之类的。
特殊字符很多是不能显示的。或者说,他们的显示方式没有标准,例如编码65到哪儿都是字母A,编码97到哪儿都是字符
Linux下禁用T440s,X240的一体化触摸板(touchpad)
gashero
linux ThinkPad 触摸板
自打1月买了Thinkpad T440s就一直很火大,其中最让人恼火的莫过于触摸板。
Thinkpad的经典就包括用了小红点(TrackPoint)。但是小红点只能定位,还是需要鼠标的左右键的。但是自打T440s等开始启用了一体化触摸板,不再有实体的按键了。问题是要是好用也行。
实际使用中,触摸板一堆问题,比如定位有抖动,以及按键时会有飘逸。这就导致了单击经常就
graph_dfs
hcx2013
Graph
package edu.xidian.graph;
class MyStack {
private final int SIZE = 20;
private int[] st;
private int top;
public MyStack() {
st = new int[SIZE];
top = -1;
}
public void push(i
Spring4.1新特性——Spring核心部分及其他
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
配置HiveServer2的安全策略之自定义用户名密码验证
liyonghui160com
具体从网上看
http://doc.mapr.com/display/MapR/Using+HiveServer2#UsingHiveServer2-ConfiguringCustomAuthentication
LDAP Authentication using OpenLDAP
Setting
一位30多的程序员生涯经验总结
pda158
编程 工作 生活 咨询
1.客户在接触到产品之后,才会真正明白自己的需求。
这是我在我的第一份工作上面学来的。只有当我们给客户展示产品的时候,他们才会意识到哪些是必须的。给出一个功能性原型设计远远比一张长长的文字表格要好。 2.只要有充足的时间,所有安全防御系统都将失败。
安全防御现如今是全世界都在关注的大课题、大挑战。我们必须时时刻刻积极完善它,因为黑客只要有一次成功,就可以彻底打败你。 3.
分布式web服务架构的演变
自由的奴隶
linux Web 应用服务器 互联网
最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都是租借的,但由于这篇文章我们只关注架构的演变历程,因此就假设这个时候已经是托管了一台主机,并且有一定的带宽了,这个时候由于网站具备了一定的特色,吸引了部分人访问,逐渐你发现系统的压力越来越高,响应速度越来越慢,而这个时候比较明显的是数据库和应用互相影响,应用出问题了,数据库也很容易出现问题,而数据库出问题的时候,应用也容易
初探Druid连接池之二——慢SQL日志记录
xingsan_zhang
日志 连接池 druid 慢SQL
由于工作原因,这里先不说连接数据库部分的配置,后面会补上,直接进入慢SQL日志记录。
1.applicationContext.xml中增加如下配置:
<bean abstract="true" id="mysql_database" class="com.alibaba.druid.pool.DruidDataSourc