Scala学习笔记

2020-6-25 Stone 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、ListScala中最重要的、最常用的数据结构

 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文件中,有一个classobject同名,那么就称这个objectclass的伴生对象,classobject的半生类。

伴生对象和半生类的最大特点就是可以相互访问。

3、Scalaobjectapply方法


4、Scalaobjectmain 方法





十二、Scala面向对象编程之继承

1、继承extends

2、 overridesuper

3、isInstanceOfasInstanceOf

4、getClassclassOf

5、访问修饰符

Java中的访问控制,同样适用于scala,可以在成员前面添加private/protected关键字来控制成员的可见性。但在scala没有public关键字,任何没有被标为privateprotected的成员都是公共的。

private[this]修饰符:被修饰的成员只能在当前类中被访问。或者可以理解为:`只能通过this.来访问`(在当前类中访问成员会自动添加this.)。

protected[this]修饰符:被修饰的成员只能在当前类和当前类的子类中被访问。也可以理解为:当前类通过**this.**访问或者子类通过**this.**访问

 

6、 调用父类的constructor

7、抽象类

8、匿名内部类





 


评论(0) 浏览(986)

SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (13)

2020-1-15 Stone mysql

通过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

标签: SQLSTATE[HY000] [2003]

评论(0) 浏览(950)

高并发下余额扣减一致性问题

2019-12-25 Stone 运维

业务场景,在购买商品时需要对余额进行查询与修改:

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/

标签: 高并发 余额扣减

评论(0) 浏览(1136)

php关于ob_gzhandler和gzencode()

2019-10-22 Stone PHP

前一段时间要搞一个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压缩输出

评论(0) 浏览(1069)

virtualBox报错 0x80004005

2019-10-12 Stone 运维

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/


标签: virtualBox报错 0x80004005

评论(0) 浏览(1374)

Apache 报错: couldn't perform authentication. AuthType not set!: /

2019-10-11 Stone 运维

使用 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报错

评论(0) 浏览(1096)

git 回滚代码到某个commit

2019-10-9 Stone 运维

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回滚

评论(0) 浏览(1139)

composer 报错:Installation failed, reverting ./composer.json to its original content.

2019-9-22 Stone PHP

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

评论(0) 浏览(1933)

ubuntu 16.04 nginx 配置gzip

2019-8-23 Stone 运维

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

标签: nginx gzip

评论(0) 浏览(1124)

WIN7远程桌面连接--“发生身份验证错误。要求的函数不受支持”

2019-7-25 Stone 运维

WIN7远程桌面连接--“发生身份验证错误。要求的函数不受支持”


解决方法:

开始菜单->运行gpedit.msc 打开配置项:计算机配置>管理模板>系统>凭据分配>加密Oracle修正 选择启用并选择易受攻击,配置保存后即可解决问题。



原文链接:https://blog.csdn.net/qq_27905477/article/details/80320358

评论(0) 浏览(1010)

Copyright © 2019 by 海角孤星 京ICP备15056837号-1