各种疑难杂症

1.socket

在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。

socket 的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的URL,向服务器发起请求,服务器分析接收到的URL,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,就将文字、图片、视频等元素呈现给用户。

学习 socket,也就是学习计算机之间如何通信,并编写出实用的程序。

2.第三方LBS

LBS定位你简单理解点就是通过基站网络去定位的
相对GPS来说,对信号的要求是比较低的
QQ浏览器这种,用的就是LBS定位,可以直接找到附近有什么美食景点什么的,还可以直接导航带你过去

3.Thread的setDaemon(true)方法的作用

定义:守护线程--也称“服务线程”,在没有用户线程可服务时会自动离开。优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。
设置:通过setDaemon(true)来设置线程为“守护线程”;将一个用户线程设置为守护线程的方式是在 线程对象创建 之前 用线程对象的setDaemon方法。

thread = new Thread(this);

thread.setDaemon(true);

thread.start();

当java虚拟机中没有非守护线程在运行的时候,java虚拟机会关闭。当所有常规线程运行完毕以后,守护线程不管运行到哪里,虚拟机都会退出运行。所以你的守护线程最好不要写一些会影响程序的业务逻辑。否则无法预料程序到底 会出现什么问题。

4. EventLoopGroup

netty是一款全异步,无阻塞的高性能框架,

netty架构图

etty是一款非阻塞框架,acceptor接收请求,poller起select的作用,像一个列车一样,把请求来回在acceptor和线程池之间传递,因为如果没有poller,就不是NIO了而是传统的BIO,NIO的作用就是创建一个通道channel,用这个通道来处理一堆请求。

我们都知道,netty的实例化,需要启动两个EventLoopGroup,事件循环组

EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();

一个boos,一个worker。

EventLoopGroup 的类图如下:
EventLoopGroup 的类图

 5.Bootstrap是什么

Bootstrap是一个做网页的框架(目前最流行的WEB前端框架之一),就是说你只需要写HTML标签调用它的类你就可以很快速的做一个高大上的网页,你不用担心兼容问题,提供了很多样式供你选择!
比如你需要做一个网站的文本显示对吧,你自己写的话你需要写很多代码,但是如果你使用bootstrap框架来写的话,只需要写好HTML标签然后调用类名就可以了!代码展示如下:
 


<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8"> 
	<title>Bootstrap 实例 - 强调</title>
	<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">  
	<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
	<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
 
<small>本行内容是在标签内</small><br>
<strong>本行内容是在标签内</strong><br>
<em>本行内容是在标签内,并呈现为斜体</em><br>
<p class="text-left">向左对齐文本</p>
<p class="text-center">居中对齐文本</p>
<p class="text-right">向右对齐文本</p>
<p class="text-muted">本行内容是减弱的</p>
<p class="text-primary">本行内容带有一个 primary class</p>
<p class="text-success">本行内容带有一个 success class</p>
<p class="text-info">本行内容带有一个 info class</p>
<p class="text-warning">本行内容带有一个 warning class</p>
<p class="text-danger">本行内容带有一个 danger class</p>
 
</body>
</html>
————————————————
版权声明:本文为CSDN博主「这孩子谁懂哈」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhaomengszu/article/details/87923083

效果如下:

作用:
用它提供的样式和组件快速写网站

你只需要引用一些定义好的类,也就是class名字,就可以创建出已经有非常漂亮的样式的网页,而且支持自适应,是一个很不错的框架。

简而言之:你只需要了解相关的class、标签名称等所代表的意思,然后在构建页面的时候,导入bootstrap的JS、css等,它就会去表现相应的效果出来。
 

6.创建日志

private static final Logger logger= LoggerFactory.getLogger(ShiroConfig.class);

我们经常这样创建日志实例,那么为什么要用static还有final呢??
网上搜集了一些简单的答案:

定义成static final,logger变量不可变,读取速度快
static 修饰的变量是不管创建了new了多少个实例,也只创建一次,节省空间,如果每次都创建Logger的话比较浪费内存;final修饰表示不可更改,常量
将域定义为static,每个类中只有一个这样的域.而每一个对象对于所有的实例域却都有自己的一份拷贝.,用static修饰既节约空间,效率也好。final 是本 logger 不能再指向其他 Logger 对象
 

7.Servlet中的ServletRequestEvent和 ServletRequestListener

ServletRequestEvent类提供有关ServletRequest生命周期事件的通知。 事件的源是Web应用程序的ServletContext。 ServletRequestListener接收ServletRequestEvent生成的通知,并根据这些通知执行一些指定的任务。

ServletRequestListener常用方法:

方法描述
void requestDestroyed(ServletRequestEvent e)当请求将超出Web应用程序的范围时调用。
void requestInitialized(ServletRequestEvent e)当请求即将进入Web应用程序范围时调用。

因此,可以轻松实现ServletRequestListener接口,并为其定义的两个方法requestDestroyed()requestInitialized()提供定义。

顾名思义,这些方法将在初始化请求和销毁请求时调用,因此我们可以将它们用于各种目的,例如销毁请求时进行变量清理 ,或在收到请求时执行一些初始检查等。

8.ServerTransaction

服务器适配类

9.Request对象中getHeader、requestHeaders、request.getHeaderNames三者区别

1.request.getHeader("Accept-Encoding");//获取单个请求头name对应的value值

2.request.getHeaders("Accept-Encoding");//获取多个同名请求头对应的一组value值,因此返回枚举类型数据

3.request.getHeaderNames();//获取请求头的所有name值,返回的数据也是一个枚举类型的数据,将枚举中的元素依次遍历出来,根据name获取对应的value值,即可得到Http请求头的所有信息
 

/*
 * 获取头信息和请求数据
 */
public class RequestDemo2 extends HttpServlet {
 
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/**
		 * 获取头信息
		 */
		String headValue = request.getHeader("Accept-Encoding");//获取单个请求头name对应的value值
		System.out.println(headValue);
		
		System.out.println("--------------");
		
		Enumeration e =  request.getHeaders("Accept-Encoding");//获取多个同名请求头对应的一组value值,因此返回枚举类型数据
		/**
		 * 将数据遍历出来
		 */
		while(e.hasMoreElements()){
		//遍历枚举中存储的每一个元素
		String value = (String)e.nextElement();
		System.out.println(value);//将值输出
		}
		
		System.out.println("----------------");
		/**
		 * 获取所有请求头信息
		 */
		Enumeration er = request.getHeaderNames();//获取请求头的所有name值
		while(er.hasMoreElements()){
		String name	=(String) er.nextElement();
		String value = request.getHeader(name);
		System.out.println(name+"="+value);
		}
	}
 
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
 
		
	}
 
}




运行结果如下:

10.DeviceInfo:设备信息

11.进制

hex表示十六进制,oct表示八进制,dec表示十进制。bin表示二进制。

12.gbk解码

String str=packet.content().toString(Charset.forName("gbk"));

12.java中trim()方法是用来干什么的?

trim()的作用是去掉字符串两端的多余的空格,注意,是两端的空格,且无论两端的空格有多少个都会去掉,当然,中间的那些空格不会被去掉,如:

String s = "  a s f g      ";        String s1 = s.trim();

那么s1就是"a s f g",可见,这和上面所说的是一样的。

trim()不仅可以去掉空格,还能去掉其他一些多余的符号,这些符号分别是:

\t  \n  \v  \f  \r  \x0085  \x00a0  ?  \u2028  \u2029

翻译过来分别是:水平制表符,换行符,垂直制表符,换页符,回车,后面的这几个除了问号外,其他的都是转义符形式写法。

13. TCP和UDP

TCP是双通道的通信模式,因此TCP的连接其实是两条物理连接,即客户端到服务器和服务器到客户端的连接,三次握手

UDP是单通道

14.Java中toHexString()

toHexString(int i)  
  以十六进制的无符号整数形式返回一个整数参数的字符串表示形式。

15.什么是re?

正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)

String  str =  "abc"

re(str) 解析收到的字符串   (str 就是收到的字符串)

公网情况下ip和端口是有时间限制的

List<Product> redisProductList = redisTemplate.boundListOps("productList").range(0,-1);
这里.range(0,-1)就是取所有数据,当然,如果只取前十条数据也可以写成.range(0,10),写成-1就是取所有.
存:
String sendAppFriendCircle = RedisKey.getFriendCircleKey("fq:sendAppFriendCircle:" + dataBean.getEditId(), dataBean.getEditId());
appRedisTemplate.opsForValue().set(sendAppFriendCircle, appFriendsGoodsVo, 2, TimeUnit.HOURS);


取:
V2AppFriendsGoodsVo appFriendsGoodsVo = (V2AppFriendsGoodsVo) appRedisTemplate.opsForValue().get(sendAppFriendCircle);


 @Autowired
    private RestTemplate restTemplate;

public void  setToRedis()
    {
        //存值
       //key----键
       //value----值
        redisTemplate.boundValueOps("key").set(value);
    }
//取值
String key= (String) redisTemplate.boundValueOps("key").get();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值