Scala学习笔记
一、映射Map六、Set集合
1、Set集合是没有重复的对象集合,所有元素都是唯一的。
2、不可变Set集合
#创建空集合 val/var 变量名= Set[类型]() Scala > val sets = Set[Int]() #创建非空Set集合 val/var 变量名 = Set[类型](元素1,元素2,元素3) Scala> val a = Set(5,2,1,3,2,4,6)
3、可变Set集合
import scala.collection.mutable.Set val b = Set(5,1,2,3,4)4、获取Set集合的大小以及循环输出Set集合数据
5、添加删除元素
![]()
七、List列表
1、List是Scala中最重要的、最常用的数据结构
List列表是可以保存重复的值,也是有先后顺序的。
2、不可变List (列表元素和长度都不可变)
val/var 变量名 = List(元素1,元素2,元素3)
//使用Nil创建空的不可变列表
val/var 变量名 = Nil
![]()
3、可变List
4、toList 将一个可变列表生成不可变列表,原列表不变
5、toArray 将一个可变列表生成不可变数组,原列表不变
八、函数式编程
1、 foreach遍历
foreach(f: (A) => unit) : unit
2、映射 - map
3、扁平化映射 - flatMap
![]()
4、过滤 - filter
![]()
5、排序 - sort
sorted
sortBy
sortWith
![]()
6、分组 - groupBy
![]()
7、聚合 - reduce
![]()
8、折叠 - fold
九、高阶函数
1、使用函数作为参数,或者返回值为函数值的“函数”或者“方法”,称之为高阶函数。
2、函数值作为参数
3、匿名函数
4、柯里化
![]()
![]()
5、闭包
函数里面引用外部类成员变量叫做闭包
十、Scala面向对象编程
1、类的定义
scala是支持面向对象的,也有类和对象的概念
2、类的构造器
1)、主构造器:是指类名的后面跟上一系列元素
2)、辅助构造器:在类中使用this来定义。
3)、示例
![]()
十一、Scala面向对象编程之对象
1、scala中的Object
Scala中没有java中的静态成员,如果用到static变量、static方法,就要用到scala中的单例对象object
定义单例对象和定义类一样,只是把class换成object
(1). 使用object 单例对象名定义一个单例对象,可以用object作为工具类或者存放常量
(2). 在单例对象中定义的变量,类似于Java中的static成员变量
(3). 在单例对象中定义的方法,类似于Java中的static方法
(4). object单例对象的构造代码可以直接写在花括号中
(5). 调用单例对象的方法,直接使用单例对象名.方法名,访问单例对象的成员变量也是使用单例对象名.变量名
(6). 单例对象只能有一个无参的主构造器,不能添加其他参数
2、 scala中的伴生对象
在同一个scala文件中,有一个class和object同名,那么就称这个object是class的伴生对象,class是object的半生类。
伴生对象和半生类的最大特点就是可以相互访问。
![]()
3、Scala中object的apply方法
4、Scala中object的main 方法
十二、Scala面向对象编程之继承
1、继承extends
2、 override和super
3、isInstanceOf和asInstanceOf
4、getClass和classOf
5、访问修饰符
Java中的访问控制,同样适用于scala,可以在成员前面添加private/protected关键字来控制成员的可见性。但在scala中,没有public关键字,任何没有被标为private或protected的成员都是公共的。
private[this]修饰符:被修饰的成员只能在当前类中被访问。或者可以理解为:`只能通过this.来访问`(在当前类中访问成员会自动添加this.)。
protected[this]修饰符:被修饰的成员只能在当前类和当前类的子类中被访问。也可以理解为:当前类通过**this.**访问或者子类通过**this.**访问
6、 调用父类的constructor
7、抽象类
8、匿名内部类
SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (13)
通过php的mysql_connect('localhost','usr','pass')连接本地数据库成功,但是,mysql_connect('127.0.0.1:3306','usr','pass')出现Can't connect to MySQL server on '127.0.0.1' (13)的错误。
解决方法:
getsebool -a | grep httpd
[root@centos ~]# getsebool -a | grep httpd allow_httpd_anon_write --> off allow_httpd_mod_auth_ntlm_winbind --> off allow_httpd_mod_auth_pam --> off allow_httpd_sys_script_anon_write --> off httpd_builtin_scripting --> on httpd_can_check_spam --> off httpd_can_network_connect --> off httpd_can_network_connect_cobbler --> off httpd_can_network_connect_db --> off httpd_can_network_memcache --> off httpd_can_network_relay --> off httpd_can_sendmail --> off httpd_dbus_avahi --> on httpd_dbus_sssd --> off httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> off httpd_execmem --> off httpd_manage_ipa --> off httpd_read_user_content --> off httpd_run_preupgrade --> off httpd_run_stickshift --> off httpd_serve_cobbler_files --> off httpd_setrlimit --> off httpd_ssi_exec --> off httpd_tmp_exec --> off httpd_tty_comm --> on httpd_unified --> on httpd_use_cifs --> off httpd_use_fusefs --> off httpd_use_gpg --> off httpd_use_nfs --> off httpd_use_openstack --> off httpd_verify_dns --> off
解决方法:
setsebool httpd_can_network_connect 1
参考链接:https://www.cnblogs.com/Darlin356230410/p/4506207.html
高并发下余额扣减一致性问题
业务场景,在购买商品时需要对余额进行查询与修改:
1、先从数据库查询余额:select balance from t_money where uid = $uid;
2、业务层:假如$balance= 100, 变动金额 $money = 80; 剩余金额 if($balance > $money) $new_balance = $balance - $money;
3、更新数据库 update t_money set balance = $new_balance where uid = $uid;
如果在高并发下,这种查询+修改就会出现问题:
同时触发两个业务:业务1和业务2,在查询的时候都是返回$balance = 100,
业务1操作金额 $money = 80,新余额:$new_balance = $balance - $money,也就是 100 - 80 = 20;
业务2操作金额 $money = 70,新余额:$new_balance = $balance - $money,也就是 100 -70 = 30;
此时就会出现异常,更新数据后balance = 30。
暂时想到的解决方案:事务 + 缓存(redis队列)
参考文档:http://lichuanyang.top/posts/56940/
php关于ob_gzhandler和gzencode()
前一段时间要搞一个gzip压缩输出,想着在文件里用ob_start('gz_handler');结果客户端始终打不开。
改成gzencode($data, 5); 之后能正常打开。
ob_gzhandler — 在ob_start中使用的用来压缩输出缓冲区中内容的回调函数。
gzencode — 创建gzip压缩字符串
gzencode ( string $data
[, int $level
= -1 [, int $encoding_mode
= FORCE_GZIP ]] )
This function returns a compressed version of the input data
compatible with the output of the gzip program.
标签: php压缩输出
virtualBox报错 0x80004005
virtualBox升级之后,无法开机出现错误,错误提示:
返回 代码: E_FAIL (0x80004005) 组件: MachineWrap 界面: IMachine {5047460a-265d-4538-b23e-ddba5fb84976}
然后就是各种百度搜索,给出的答案也是五花八门,然后各种试,始终是报错。
然后把virtualBox还原到原来的版本,仍然出错,最后把virtualBox版本降到4.1.3,安装完成之后就能正常启动了。
参考链接:http://freewisdoms.com/how-to-fix-0x80004005-error-virtualbox-unable-to-start-virtual-machine/
Apache 报错: couldn't perform authentication. AuthType not set!: /
使用 Apache 的虚拟机服务,出现 500 internal error。查看 error_log,看到如下报错内容:
[Fri Oct 11 00:17:46 2019] [crit] [client 124.64.30.156] configuration error: couldn't perform authentication. AuthType not set!:
然后httpd.conf中的代码:
<VirtualHost *:80> DocumentRoot "/htdocs/tu/web" ServerName localhost:80 ErrorLog logs/www.tu.com.error.log CustomLog logs/www.tu.com.access.log common <Directory "/htdocs/tu/web"> Options Indexes FollowSymLinks ExecCGI AllowOverride all allow from all Require all granted </Directory> </VirtualHost>
百度一下,说是发现 “Require all granted” 指令只能用于 Apache 2.4,现在用的是Apache 2.2,。
只需要将 Require all granted 替换一下:
Order allow,deny Allow from all
标签: apache报错
git 回滚代码到某个commit
1、查看commit日志 git log
2、git回滚代码 回退到上个版本:git reset --hard HEAD^ 回退到前3次提交之前,以此类推,回退到n次提交之前: git reset --hard HEAD~3 回滚到指定commit的sha码 git reset --hard commit_id
标签: git回滚
composer 报错:Installation failed, reverting ./composer.json to its original content.
tp5使用composer安装Image类的时候报错,
composer require topthink/think-image
错误提示:Installation failed, reverting ./composer.json to its original content.
修改方法:
1、在composer.json文件里"require"下添加代码:
"topthink/think-image" : "^1.0",然后执行
composer update
标签: failed composer Installation
ubuntu 16.04 nginx 配置gzip
cd /etc/nginx vim nginx.conf gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_min_length 256; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon; 重启nginx systemctl reload nginx
WIN7远程桌面连接--“发生身份验证错误。要求的函数不受支持”
WIN7远程桌面连接--“发生身份验证错误。要求的函数不受支持”
解决方法:
开始菜单->运行gpedit.msc 打开配置项:计算机配置>管理模板>系统>凭据分配>加密Oracle修正 选择启用并选择易受攻击,配置保存后即可解决问题。
原文链接:https://blog.csdn.net/qq_27905477/article/details/80320358