IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【实习总结】学习经验2 -> 正文阅读

[Java知识库]【实习总结】学习经验2

1、okhttp

String url="http://www.";
/**
 * 发送HTTPS GET请求,处理服务端的响应。
 */
Request request = new Request.Builder().url(url).get().build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
System.out.println(response.headers().toString());

2、ConcurrentHashMap

多线程增加修改时,不会抛出ConcurrentModificationException,而HashMap会;推荐应用场景 多线程对HashMap数据添加删除操作。

应用:保存session

3、NIO

IO是面向流的,NIO是面向缓冲区的

Java NIO 管道是2个线程之间的单向数据连接。组成:Channel(通道),Buffer(缓冲区), Selector

Channel主要实现有:FileChannel 文件IO、DatagramChannel UDP、SocketChannel TCP Client、ServerSocketChannel TCP Server

Buffer:ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer

Selector运行单线程处理多个Channel

Pipe有一个source通道和一个sink通道。数据会被写到sink通道从source通道读取

4、长连接和短连接

a.长连接:client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收。

b.短连接:Client方与server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此方式常用于一点对多点通讯

发送接收方式:

a.异步双工:接收和发送在同一个程序中,有两个不同的子进程分别负责发送和接送。

b.异步单工:接送和发送使用两个不同的程序来完成。

c.同步:报文发送和接收是同步进行,发送后等待接送返回报文

5、?Arrays.fill(buff, (byte) 0);?

6、sso单点登录

访问应用时,填写完用户名、密码后,完成登录(session状态为yes,浏览器中写入cookie)

有一个应用叫a.com 两个业务系统app1.a.com和app2.a.com SSO登录系统:sso.a.com

cookie不能跨域.

流程:

a.a.com创建令牌token,把令牌放入全局会话session中,同时把令牌放入redis库中

b.a.com携带令牌到客户端:redirectAttributes.addAttribute("ssoToken", ssoToken);

c.app1.a.com子系统判断是否有局部会话/全局会话,校验token有效性,从redis中获取,并记录到该子系统的redis库中

d.app1.a.com子系统设置本域cookie

d.退出登录,退出监听。redis删除令牌

7、sql

(1)数据类型:如果是json较长的用text 短的可以用varchar

8、多线程,事务回滚

service:

@Transactional(transactionManager = "xxTransactionManager", rollbackFor = Exception.class)

dao:

@Bean(name = "xxTransactionManager")
public PlatformTransactionManager transactionManager(
@Autowired @Qualifier("examDataSource") DataSource ds) {
? ? return createTransactionManager(ds);
}

9、mybatis:

a.条件模糊筛选

qw.and(wrapper ->wrapper.likeRight("subject", xxx).or().likeRight("qid", xxx));

b.java8 stream().map().collect()用法

eg:从user这个List中获得身份证id,以往是for循环,现在如下代码:

List<Long> ids = list.getRecords().stream().map(UserEntity::getId).collect(Collectors.toList());

c.批量插入

mapper.batchInsert(list);

10、判空

字符串:StringUtils.isEmpty()

list:CollectionUtils.isEmpty

int:==null

11、提交异步任务

a.定义异步任务名

public static final String ASYNC_TASK_XXX?= "project1.name";

b.提交任务

 timerTaskExecutor.submit(AsyncTaskNames.ASYNC_TASK_XXX,
            () -> service.genAudioUrl());

12、map遍历

 Iterator<String> key= map.keySet().iterator();
    while (key.hasNext()) {
        String key= key.next();
        String value = map.get(key);
    }

12、kafka

(1)配置Kafka

a.注册消费者

//消费者    
@Bean("msgKafkaMsgHandler")
    public KafkaMsgHandler createKafkaMsgHandler() {
        MsgHandleService msgyHandleService = beanFactory.getBean(MsgHandleService.class);
        KafkaMsgHandler handler = super.createKafkaMsgHandler(beanFactory);
        //注册xxx任务结束后的handler
        handler.registerPayloadHandler(XXX.class, msgHandleService::handle);
        return handler;
    }
//监听消费
    @Bean("msgNotifyKafkaListenerCF")
    public KafkaListenerContainerFactory
            <ConcurrentMessageListenerContainer<String, KafkaMsg>> createKafkaListenerCf(BeanFactory beanFactory) {
        return super.createKafkaListenerContainerFactory(beanFactory);
    }
}

b.生产者

private KafkaMsgSender kafkaMsgSender;
kafkaMsgSender.send(req, sessionId);

c.消费者的Handle

@Service
@Profile("!local")
public class MsgQueueConsumer {
    @Autowired
    @Qualifier("msgKafkaMsgHandler")
    KafkaMsgHandler kafkaMsgHandler;
    @KafkaListener(id = "msgQueueListener",
            topics = "${topicName}",
            containerFactory = "msgKafkaListenerCF")
    public void onMessage(KafkaMsg msg) {
        kafkaMsgHandler.handle(msg);
    }
    public void handle(Req req) {
        //业务代码
    }
}

13、feign

@FeignClient(value = "xxx-boot")
public interface IApiService {
    /**
     * 异步获取评分.
     */
    @PostMapping(value = "/logan/score")
    Resp syncGetScore(@RequestBody Req req);
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:18:55  更:2022-03-15 22:21:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:45:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码