java 随笔

如何网页微信授权

1、引导用户进入授权页面同意授权,获取code

  • 配置菜单地址的时候, 把自己的地址放在回调参数中,
  • 并且设置scope,如果scope的值是base就只能openid, 如果是userinfo 用户页面会弹出是否同意授权页面,同意以后,可以拿用户的的昵称、性别、所在地

2、通过code换取网页授权access_token(与基础支持中的access_token不同).

  • 微信回调我们第一步配置的自己的回调地址的时候,request里就有code, 所以直接通过HttpServletRequest 就可以拿code. String code=req.getParameter(“code”);
  • 拿到code以后,发一个请求到微信的接口,并且把code放在request里面。微信就会返回access_token和openid

3、如果需要,开发者可以刷新网页授权access_token,避免过期

4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

  • 如果还需要拿用户信息,可以发送请求到微信接口,把openid和access_token放在请求里面。

Vue.js 是什么?

Vue.js是一个MVVM框架。 可以拆分成:View — ViewModel — Model三部分。
最直接的体现就是通过v-model 实现 input框的双向绑定

Java的反射机制是什么?

Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用

反射的实现三种方式

  • getClass方法
  • 通过Class的静态方法. Class.forName(“类名”)
  • 直接通过new. Class a=new Test.class

SpringCould的运行原理

  • Eureka(服务发现):各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里
  • Ribbon(客服端负载均衡):服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台
  • Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
  • Hystrix(熔断器):发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题
  • Zuul(路由网关):如果前端、移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服务

什么是Spring?

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架

什么是IOC?

IOC就是控制反转, 以前一个类需要调用另外一个类的时候,会在代码中创建一个被调用者的对象。Spring里面,不需要在代码里面创建对象,spring会根据配置注入一个被调者的对象。所以就是把两个类依赖的控制权交给了spring容器,所以叫控制反转。 其中注入被调用者对象的过程就是依赖注入(DI)。

什么是AOP?

AOP就是面向切面编程。通常用来实现权限认证、日志、事务。

Spring Boot是什么?有什么作用?

  • Spring Boot使编码变简单
  • SpringBoot帮助开发者快速启动一个Web容器 自带tomcat
  • Spring Boot使部署变简单

编码练习1

在这里插入图片描述
在这里插入图片描述

代码:

package com.zz.util;

import lombok.Data;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @Description: java类作用描述
 * @Author: Bsea
 * @CreateDate: 2019/6/22$ 19:30$
 */
@Data
public class TreeData {
    public String childNode;
    public String parentNode;
    public int value;
    List<TreeData> listTreeData;
    List<TreeData> l1=new ArrayList();




    public static void main(String[] args) {
        List<TreeData> list=new ArrayList();
        TreeData treeData=new TreeData();
        TreeData t1=new TreeData();
        t1.childNode="ROOT";
        t1.value=1;
        TreeData t2=new TreeData();
        t2.childNode="A";
        t2.parentNode="ROOT";
        t2.value=2;
        TreeData t3=new TreeData();
        t3.childNode="B";
        t3.parentNode="ROOT";
        t3.value=3;
        TreeData t4=new TreeData();
        t4.childNode="C";
        t4.parentNode="A";
        t4.value=7;
        TreeData t5=new TreeData();
        t5.childNode="D";
        t5.parentNode="B";
        t5.value=6;
        TreeData t6=new TreeData();
        t6.childNode="E";
        t6.parentNode="B";
        t6.value=5;
        list.add(t1);
       list.add(t2);
        list.add(t3);
       list.add(t4);
        list.add(t5);
      list.add(t6);
        treeData.listTreeData=list;
        List<TreeData> ls=treeData.getTreeData("B");
        System.out.println(Arrays.toString(ls.toArray()));
    }

    List getTreeData(String childNode){
//        List<TreeData> l1=new ArrayList();
        System.out.println("childNode****"+childNode);
        for(TreeData t:this.listTreeData){
            System.out.println("t.parentNode****"+t.parentNode);
            if(t.parentNode!=null&&t.parentNode.equals(childNode)){
                l1.add(t);
                System.out.println("t.childNode****"+t.childNode);
                getTreeData(t.childNode);
            }
        }
        return l1;
    }

}

编码练习2

在这里插入图片描述

代码

package com.zz.util;

import java.io.*;

/**
 * @Description: java类作用描述
 * @Author: Bsea
 * @CreateDate: 2019/6/22$ 20:56$
 */
public class Test {
    public static void main(String[] args) throws IOException {
        Test test=new Test();

        System.out.println("统计的数据》》》》》"+test.getTotal("C:\\bsea\\wp\\20191\\usermanager\\src\\main\\java\\com\\zz\\util\\t.txt"));
    }

    public int getTotal(String path) throws IOException {
        BufferedReader reader=new BufferedReader(new InputStreamReader(new FileInputStream(new File(path))));
        String str=reader.readLine();
        int total=0;
        while (str!=null){
            String[] ss= str.split(";");
            if(ss.length>1){
                int v=Integer.parseInt(ss[1]);
                //total=total+v;
                total+=v;
            }

            str=reader.readLine();

        }

        return  total;
    }
}

break,continue的区别

break是终止当前循环(注意break是能终止一层for循环)

continue 是跳过本次循环,循环继续。

mysql 分页查询

  • select * from table limit 0,10; 表示从0开始,一共查10记录
  • 分页sql格式是:select * from table limit (start-1)*pageSize,pageSize; 其中start是页码,pageSize是每页显示的条数。
  • 比如每页显示20行, 那么第一页 select * from table limit 0,20; 第二页 select * from table limit 20,20; ,第三页 select * from table limit 40,20;

Spring Bean的作用域

一共5个

  • singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例。默认情况就是单列

  • prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例

  • request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效

  • session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效

  • globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

Java 实现单列模式

双重验证。 保证效率和线程安全

package com.zz.util;

/**
 * @Description: java类作用描述
 * @Author: Bsea
 * @CreateDate: 2019/6/22$ 21:43$
 * 双重验证。 保证效率和线程安全
 */

public class Singletondemo3 {
    private static Singletondemo3 s=null;
    public static Singletondemo3 getSingleton()
    {
        
        if(s==null){
            synchronized (Singletondemo3.class){
                if(s==null) {
                    s = new Singletondemo3();
                }
            }
          
        }
        return  s;
    }
    private Singletondemo3(){
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值